Quantcast

How to setup policy for client-side message acceptance?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

How to setup policy for client-side message acceptance?

Ilya
Hello,

It is not clear, how to achieve message acceptance on client.

Following OASIS AMQP1.0 docs, I assume that I have to setup
sender-settle-mode - unsettled (0)
receiver-settle-mode - second (1)
in order to use accept/modify/reject methods, but it does not work as expected.

Scenario
1. start activemq and ensure that the're no queues registered
2. run sender
2a. send message
3. run receiver
3a. get message and modify
4. run receiver
4a. get message

Log for (2)
===
  amqp10:link undefined:0: Transitioning from DETACHED to ATTACHING due to sendAttach +4ms
  amqp10:link attach CH=1, Handle=0 +0ms
  amqp10:framing sending frame:  @attach(18) [name='test_d5c61642-99b0-4315-bef5-7bffdf0f8d64' handle=0 role=false senderSettleMode=0 receiverSettleMode=1 source=@source(40) [address='localhost' durable=0 expiryPolicy='session-end' timeout=0 dynamic=false dynamicNodeProperties={} distributionMode=null filter={} defaultOutcome=null outcomes=null capabilities=null] target=@target(41) [address='test' durable=0 expiryPolicy='session-end' timeout=0 dynamic=false dynamicNodeProperties={} capabilities=null] unsettled={} incompleteUnsettled=false initialDeliveryCount=1 maxMessageSize=0 offeredCapabilities=null desiredCapabilities=null properties={}] +1ms
  amqp10:trace raw: [0000009602000001005312c0890ea129746573745f64356336313634322d393962302d343331352d626566352d376266666466306638643634434250005001005328c0260ba1096c6f63616c686f737443a30b73657373696f6e2d656e644342c1010040c10100404040005329c01b07a1047465737443a30b73657373696f6e2d656e644342c1010040c10100425201444040c10100] +0ms
  amqp10:connection Rx: 0000008602000000005312c07907a129746573745f64356336313634322d393962302d343331352d626566352d376266666466306638643634434150025000005328c02308a1096c6f63616c686f737443a30b73657373696f6e2d656e644342c1010040c10100005329c01a06a1047465737443a30b73657373696f6e2d656e644342c101000000002402000000005313c017075201707fffffff5201707fffffff43520170000003e8 +1ms
  amqp10:framing received frame:  @attach(18) [name='test_d5c61642-99b0-4315-bef5-7bffdf0f8d64' handle=0 role=true senderSettleMode=2 receiverSettleMode=0 source=@source(40) [address='localhost' durable=0 expiryPolicy='session-end' timeout=0 dynamic=false dynamicNodeProperties={} distributionMode=null filter={} defaultOutcome=null outcomes=null capabilities=null] target=@target(41) [address='test' durable=0 expiryPolicy='session-end' timeout=0 dynamic=false dynamicNodeProperties={} capabilities=null] unsettled={} incompleteUnsettled=false initialDeliveryCount=null maxMessageSize=0 offeredCapabilities=null desiredCapabilities=null properties={}] +2ms
  amqp10:trace raw: [005312c07907a129746573745f64356336313634322d393962302d343331352d626566352d376266666466306638643634434150025000005328c02308a1096c6f63616c686f737443a30b73657373696f6e2d656e644342c1010040c10100005329c01a06a1047465737443a30b73657373696f6e2d656e644342c10100] +0ms
  amqp10:link test_d5c61642-99b0-4315-bef5-7bffdf0f8d64:0: Transitioning from ATTACHING to ATTACHED due to attachReceived +0ms
  amqp10:link test_d5c61642-99b0-4315-bef5-7bffdf0f8d64: attached CH=[1=>0], Handle=[0=>0] +0ms
  amqp10:framing received frame:  @flow(19) [nextIncomingId=1 incomingWindow=2147483647 nextOutgoingId=1 outgoingWindow=2147483647 handle=0 deliveryCount=1 linkCredit=1000 available=null drain=false echo=false properties={}] +1ms
  amqp10:trace raw: [005313c017075201707fffffff5201707fffffff43520170000003e8] +0ms
  amqp10:session New Incoming Window (known id): 2147483647 = 1 + 2147483647 - 1 +0ms
===
It shows that ActiveMQ ignores 'senderSettleMode=1 receiverSettleMode=2' and sets 'senderSettleMode=2 and receiverSettleMode=0' on link.

Log for (2a)
===
  amqp10:link:sender setting credits (1001,2147483647) +0ms
  amqp10:link:sender canSend(1001,2147483647) = true +1ms
  amqp10:link:sender sending:  { behavior: 2 } +0ms
  amqp10:framing sending frame:  @transfer(20) [handle=0 deliveryId=1 deliveryTag=<Buffer 31> messageFormat=0 settled=false more=false rcvSettleMode=0 state=null resume=false aborted=false batchable=false] +1ms
  amqp10:trace raw: [0000004e02000001005314c0100b435201a00131434242500040424242005370c00705415004404243005373c00e0d40404040404040404040404040005377c10d02a1086265686176696f725202] +1ms
  amqp10:connection Rx: 0000001802000000005315c00b0541520152014100532445 +46ms
  amqp10:framing received frame:  @disposition(21) [role=true first=1 last=1 settled=true state=@accepted(36) [] batchable=false] +1ms
  amqp10:trace raw: [005315c00b0541520152014100532445] +0ms
===
It shows that despite the fact that there's no consumer connected to the queue I receive 'settled=true state=accepted' for the message sent

Log for (3) is the same as for (2), shows the same property

Log for (3a)
===
  amqp10:framing sending frame:  @flow(19) [nextIncomingId=1 incomingWindow=200 nextOutgoingId=1 outgoingWindow=100 handle=0 deliveryCount=0 linkCredit=100 available=0 drain=false echo=false properties={}] +1ms
  amqp10:trace raw: [0000002002000001005313c0130b520152c85201526443435264434242c10100] +0ms
  amqp10:connection Rx: 0000004502000000005314c007044343a0013043005370c00705415004404243005373c00e0d40404040404040404040404040005377c10d02a1086265686176696f725202 +9s
  amqp10:framing received frame:  @transfer(20) [handle=0 deliveryId=0 deliveryTag=<Buffer 30> messageFormat=0 settled=null more=false rcvSettleMode=0 state=null resume=false aborted=false batchable=false] +0ms
  amqp10:trace raw: [005314c007044343a0013043005370c00705415004404243005373c00e0d40404040404040404040404040005377c10d02a1086265686176696f725202] +1ms
  amqp10:link:receiver Rx message 0 on test_16ba362b-5bef-42e4-8d54-64eceb13edbe, 99 credit, 199 window left. +0ms
  amqp10:link:receiver received from (test_16ba362b-5bef-42e4-8d54-64eceb13edbe): [object Object] +1ms
  amqp10:framing sending frame:  @disposition(21) [role=true first=0 last=0 settled=true state=@modified(39) [deliveryFailed=false undeliverableHere=true messageAnnotations=null] batchable=false] +1ms
  amqp10:trace raw: [0000001c02000001005315c00f0641434341005327c0040342414042] +1ms
===
Here I'm trying to modify message with 'undeliverable-here' resolution.

Log for (4) is the same as for (2).
Log for (4a) does not exist because message disappears from queue after (3a) and falls to DLQ because it is durable.

What am I doing wrong here?

ActiveMQ: v5.4.14
amqp10: v3.5.0
Loading...