-
Notifications
You must be signed in to change notification settings - Fork 4k
Closed
Milestone
Description
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
- Send disposition frame in modified state
- 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
Labels
No labels