Skip to content

Support for AMQPv1 modified outcome #6121

@motmot80

Description

@motmot80

We are using QPID with the AMQPv1 plugin which is the default JAVA JMS + RMQ combination.
When QPID uses the AMQPv1 "modified" outcome RMQ cuts the connection.
While there's no need for full modified state support the RabbitMQ should not cut off a consumer which use a standardized AMQPv1 frame combination.

Description

Using amqpv1 with classic queues and a high message througput combined with TTL causes protocol errors with QPID.
The default implementation of QPID uses the modified state in the disposition frame to tell RMQ that the TTL has expired after TRANSFER.

OASIS AMQPv1 this state:

http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#type-modified

Reproduction

  1. Send disposition frame in modified state
  2. Use QPID consumer on high message througput with a short message TTL

Error

{'v1_0.disposition',true,
                                     {uint,0},
                                     {uint,0},
                                     true,
                                     {'v1_0.modified',true,true,undefined},
                                     undefined} [condition = amqp:invalid-field]

Workaround

Disable QPID expiry feature

jms.localMessageExpiry=false

Details

AMQPv1 trace:


RECV: Transfer{handle=0, deliveryId=0, deliveryTag=\x00\x00\x00\x00\x00\x00\x00\x01, messageFormat=0, settled=false, more=false, rcvSettleMode=null, state=null, resume=false, aborted=false, batchable=false} (429) "..."

SENT: Flow{nextIncomingId=1, incomingWindow=2047, nextOutgoingId=1, outgoingWindow=2147483647, handle=0, deliveryCount=1, linkCredit=1, available=null, drain=false, echo=false, properties=null}

SENT: Disposition{role=RECEIVER, first=0, last=0, settled=true, state=Modified{deliveryFailed=true, undeliverableHere=true, messageAnnotations=null}, batchable=false}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions