You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by Ilya <il...@lebedev.net> on 2017/04/14 09:57:58 UTC

How to setup policy for client-side message acceptance?

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 



--
View this message in context: http://activemq.2283324.n4.nabble.com/How-to-setup-policy-for-client-side-message-acceptance-tp4724961.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.