On Fri, Aug 26, 2016 at 3:04 PM, Gordon Sim <[email protected]> wrote:
> On 26/08/16 18:50, Matt Broadstone wrote:
>
>> Hi all,
>>
>> It was my understanding that if you replied to a received message with a
>> `released` outcome, that the broker would attempt re-delivery to either
>> the
>> link that received it or some other attached link. Is that correct?
>>
>
> That is correct.
>
> I'm
>> not seeing this behavior with this simplified use case (using
>> node-amqp10):
>>
> >
>
>> const amqp = require('amqp10');
>> let client = new amqp.Client();
>> client.connect('amqp://<some qpidd ip>')
>> .then(() => Promise.all([
>> client.createSender('test.queue'), client.createReceiver('test.qu
>> eue')
>> ]))
>> .spread((sender, receiver) => {
>> let receiveCount = 0;
>> receiver.on('message', msg => {
>> receiveCount++;
>> if (receiveCount === 10) process.exit(0);
>> console.log('received[', receiveCount, '], releasing');
>> receiver.release(msg);
>> });
>>
>> return sender.send({ test: 'message' });
>> });
>>
>
> I think you may be accepting before you release? What qpidd sees is:
>
>
Oops you're sorry I forgot a crucial part there, here's the updated code:
const amqp = require('amqp10');
let client = new amqp.Client();
client.connect('amqp://<address>')
.then(() => Promise.all([
client.createSender('test.queue'),
client.createReceiver('test.queue', {
attach: { receiverSettleMode: 'settle' }
})
]))
.spread((sender, receiver) => {
let receiveCount = 0;
receiver.on('message', msg => {
receiveCount++;
if (receiveCount === 10) process.exit(0);
console.log('received[', receiveCount, '], releasing');
receiver.release(msg);
});
return sender.send({ test: 'message' });
});
With this code I now get the following on qpidd's side:
2016-08-26 15:11:15 [Protocol] trace
[qpid.192.168.1.5:5672-192.168.1.2:58364]: 0 -> @flow(19)
[next-incoming-id=2, incoming-window=2147483647, next-outgoing-id=0,
outgoing-window=2147483647, handle=0, delivery-count=2, link-credit=500,
drain=false]
2016-08-26 15:11:15 [Protocol] trace
[qpid.192.168.1.5:5672-192.168.1.2:58364]: 0 -> @transfer(20) [handle=1,
delivery-id=0, delivery-tag=b"\x00\x00\x00\x00", message-format=0,
settled=false, more=false] (32) "\x00Sp\xc0\x06\x04BP\x04@A
\x00Sw\xc1\x10\x02\xa1\x04test\xa1\x07message"
2016-08-26 15:11:15 [Protocol] trace
[qpid.192.168.1.5:5672-192.168.1.2:58364]: 0 -> @disposition(21)
[role=true, first=1, last=1, settled=true, state=@accepted(36) []]
2016-08-26 15:11:15 [Protocol] trace
[qpid.192.168.1.5:5672-192.168.1.2:58364]: 1 <- @disposition(21)
[role=true, first=0, last=0, settled=true, state=@released(38) [],
batchable=false]
I included the extra frames above to show that I should definitely have
enough credit for a redelivery. Am I missing something else here?
> 2016-08-26 20:02:36 [Protocol] trace [qpid.127.0.0.1:5672-127.0.0.1:46958]:
>> 1 <- @disposition(21) [role=true, first=0, last=0, settled=true,
>> state=@accepted(36) [], batchable=false]
>> 2016-08-26 20:02:36 [Protocol] trace [qpid.127.0.0.1:5672-127.0.0.1:46958]:
>> 1 <- @disposition(21) [role=true, first=0, last=0, settled=true,
>> state=@released(38) [], batchable=false]
>>
>
> The second disposition is ignored.
>
> Running the attached release example against qpidd, I see the behaviour I
> would expect:
>
> $ PN_TRACE_FRM=1 ./release.py
>> [0x55ee3ab25570]: -> SASL
>> [0x55ee3ab25570]: <- SASL
>> [0x55ee3ab25570]:0 <- @sasl-mechanisms(64)
>> [sasl-server-mechanisms=@PN_SYMBOL[:ANONYMOUS,
>> :PLAIN]]
>> [0x55ee3ab25570]:0 -> @sasl-init(65) [mechanism=:ANONYMOUS,
>> initial-response=b"[email protected]"]
>> [0x55ee3ab25570]:0 <- @sasl-outcome(68) [code=0]
>> [0x55ee3ab25570]: -> AMQP
>> [0x55ee3ab25570]:0 -> @open(16)
>> [container-id="f8de2985-4cd1-4262-8811-22e44e50a5fc",
>> hostname="localhost", channel-max=32767]
>> [0x55ee3ab25570]:0 -> @begin(17) [next-outgoing-id=0, incoming-window=
>> 2147483647, outgoing-window=2147483647]
>> [0x55ee3ab25570]:0 -> @attach(18)
>> [name="f8de2985-4cd1-4262-8811-22e44e50a5fc-examples",
>> handle=0, role=true, snd-settle-mode=2, rcv-settle-mode=0,
>> source=@source(40) [address="examples", durable=0, timeout=0,
>> dynamic=false], target=@target(41) [durable=0, timeout=0, dynamic=false],
>> initial-delivery-count=0]
>> [0x55ee3ab25570]:0 -> @attach(18)
>> [name="f8de2985-4cd1-4262-8811-22e44e50a5fc-examples",
>> handle=1, role=false, snd-settle-mode=2, rcv-settle-mode=0,
>> source=@source(40) [durable=0, timeout=0, dynamic=false],
>> target=@target(41) [address="examples", durable=0, timeout=0,
>> dynamic=false], initial-delivery-count=0]
>> [0x55ee3ab25570]:0 -> @flow(19) [incoming-window=2147483647,
>> next-outgoing-id=0, outgoing-window=2147483647, handle=0,
>> delivery-count=0, link-credit=10, drain=false]
>> [0x55ee3ab25570]: <- AMQP
>> [0x55ee3ab25570]:0 <- @open(16)
>> [container-id="a6022696-2483-49f5-8ea6-a6f50db0e7ae",
>> channel-max=32767, offered-capabilities=@PN_SYMBOL[:"ANONYMOUS-RELAY"],
>> properties={:product="qpid-cpp", :version="0.35", :platform="Linux",
>> :host="localhost.localdomain"}]
>> [0x55ee3ab25570]:0 <- @begin(17) [remote-channel=0, next-outgoing-id=0,
>> incoming-window=2147483647, outgoing-window=2147483647]
>> [0x55ee3ab25570]:0 <- @attach(18)
>> [name="f8de2985-4cd1-4262-8811-22e44e50a5fc-examples",
>> handle=0, role=false, snd-settle-mode=2, rcv-settle-mode=0,
>> source=@source(40) [address="examples", durable=0, timeout=0,
>> dynamic=false, distribution-mode=:move], target=@target(41) [durable=0,
>> timeout=0, dynamic=false], initial-delivery-count=0]
>> [0x55ee3ab25570]:0 <- @attach(18)
>> [name="f8de2985-4cd1-4262-8811-22e44e50a5fc-examples",
>> handle=1, role=true, snd-settle-mode=2, rcv-settle-mode=0,
>> source=@source(40) [durable=0, timeout=0, dynamic=false],
>> target=@target(41) [address="examples", durable=0, timeout=0,
>> dynamic=false], initial-delivery-count=0]
>> [0x55ee3ab25570]:0 <- @flow(19) [next-incoming-id=0, incoming-window=
>> 2147483647, next-outgoing-id=0, outgoing-window=2147483647, handle=1,
>> delivery-count=0, link-credit=500, drain=false]
>> [0x55ee3ab25570]:0 -> @transfer(20) [handle=1, delivery-id=0,
>> delivery-tag=b"1", message-format=0, settled=false, more=false] (78)
>> "\x00Sp\xd0\x00\x00\x00\x0b\x00\x00\x00\x05BP\x04@BR\x00\x00
>> Ss\xd0\x00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\
>> x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>> message"
>> [0x55ee3ab25570]:0 <- @flow(19) [next-incoming-id=1, incoming-window=
>> 2147483647, next-outgoing-id=0, outgoing-window=2147483647, handle=1,
>> delivery-count=1, link-credit=500, drain=false]
>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=0,
>> delivery-tag=b"\x00\x00\x00\x00", message-format=0, settled=false,
>> more=false] (70) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>> 0Ss\xd0\x00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\
>> x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>> message"
>> [0x55ee3ab25570]:0 <- @disposition(21) [role=true, first=0, last=0,
>> settled=true, state=@accepted(36) []]
>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=0, last=0,
>> settled=true, state=@modified(39) [delivery-failed=false,
>> undeliverable-here=false]]
>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=1,
>> delivery-tag=b"\x00\x00\x00\x01", message-format=0, settled=false,
>> more=false] (85) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>> 0Sr\xd1\x00\x00\x00\x07\x00\x00\x00\x02\xa1\x00@\x00Ss\xd0\
>> x00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\x00\
>> x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>> message"
>> [0x55ee3ab25570]:0 -> @flow(19) [next-incoming-id=2, incoming-window=
>> 2147483647, next-outgoing-id=1, outgoing-window=2147483647, handle=0,
>> delivery-count=2, link-credit=9, drain=false]
>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=1, last=1,
>> settled=true, state=@modified(39) [delivery-failed=false,
>> undeliverable-here=false]]
>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=2,
>> delivery-tag=b"\x00\x00\x00\x02", message-format=0, settled=false,
>> more=false] (85) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>> 0Sr\xd1\x00\x00\x00\x07\x00\x00\x00\x02\xa1\x00@\x00Ss\xd0\
>> x00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\x00\
>> x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>> message"
>> [0x55ee3ab25570]:0 -> @flow(19) [next-incoming-id=3, incoming-window=
>> 2147483647, next-outgoing-id=1, outgoing-window=2147483647, handle=0,
>> delivery-count=3, link-credit=9, drain=false]
>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=2, last=2,
>> settled=true, state=@modified(39) [delivery-failed=false,
>> undeliverable-here=false]]
>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=3,
>> delivery-tag=b"\x00\x00\x00\x03", message-format=0, settled=false,
>> more=false] (85) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>> 0Sr\xd1\x00\x00\x00\x07\x00\x00\x00\x02\xa1\x00@\x00Ss\xd0\
>> x00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\x00\
>> x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>> message"
>> [0x55ee3ab25570]:0 -> @flow(19) [next-incoming-id=4, incoming-window=
>> 2147483647, next-outgoing-id=1, outgoing-window=2147483647, handle=0,
>> delivery-count=4, link-credit=9, drain=false]
>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=3, last=3,
>> settled=true, state=@modified(39) [delivery-failed=false,
>> undeliverable-here=false]]
>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=4,
>> delivery-tag=b"\x00\x00\x00\x04", message-format=0, settled=false,
>> more=false] (85) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>> 0Sr\xd1\x00\x00\x00\x07\x00\x00\x00\x02\xa1\x00@\x00Ss\xd0\
>> x00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\x00\
>> x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>> message"
>> [0x55ee3ab25570]:0 -> @flow(19) [next-incoming-id=5, incoming-window=
>> 2147483647, next-outgoing-id=1, outgoing-window=2147483647, handle=0,
>> delivery-count=5, link-credit=9, drain=false]
>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=4, last=4,
>> settled=true, state=@modified(39) [delivery-failed=false,
>> undeliverable-here=false]]
>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=5,
>> delivery-tag=b"\x00\x00\x00\x05", message-format=0, settled=false,
>> more=false] (85) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>> 0Sr\xd1\x00\x00\x00\x07\x00\x00\x00\x02\xa1\x00@\x00Ss\xd0\
>> x00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\x00\
>> x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>> message"
>> [0x55ee3ab25570]:0 -> @flow(19) [next-incoming-id=6, incoming-window=
>> 2147483647, next-outgoing-id=1, outgoing-window=2147483647, handle=0,
>> delivery-count=6, link-credit=9, drain=false]
>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=5, last=5,
>> settled=true, state=@modified(39) [delivery-failed=false,
>> undeliverable-here=false]]
>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=6,
>> delivery-tag=b"\x00\x00\x00\x06", message-format=0, settled=false,
>> more=false] (85) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>> 0Sr\xd1\x00\x00\x00\x07\x00\x00\x00\x02\xa1\x00@\x00Ss\xd0\
>> x00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\x00\
>> x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>> message"
>> [0x55ee3ab25570]:0 -> @flow(19) [next-incoming-id=7, incoming-window=
>> 2147483647, next-outgoing-id=1, outgoing-window=2147483647, handle=0,
>> delivery-count=7, link-credit=9, drain=false]
>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=6, last=6,
>> settled=true, state=@modified(39) [delivery-failed=false,
>> undeliverable-here=false]]
>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=7,
>> delivery-tag=b"\x00\x00\x00\x07", message-format=0, settled=false,
>> more=false] (85) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>> 0Sr\xd1\x00\x00\x00\x07\x00\x00\x00\x02\xa1\x00@\x00Ss\xd0\
>> x00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\x00\
>> x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>> message"
>> [0x55ee3ab25570]:0 -> @flow(19) [next-incoming-id=8, incoming-window=
>> 2147483647, next-outgoing-id=1, outgoing-window=2147483647, handle=0,
>> delivery-count=8, link-credit=9, drain=false]
>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=7, last=7,
>> settled=true, state=@modified(39) [delivery-failed=false,
>> undeliverable-here=false]]
>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=8,
>> delivery-tag=b"\x00\x00\x00\x08", message-format=0, settled=false,
>> more=false] (85) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>> 0Sr\xd1\x00\x00\x00\x07\x00\x00\x00\x02\xa1\x00@\x00Ss\xd0\
>> x00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\x00\
>> x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>> message"
>> [0x55ee3ab25570]:0 -> @flow(19) [next-incoming-id=9, incoming-window=
>> 2147483647, next-outgoing-id=1, outgoing-window=2147483647, handle=0,
>> delivery-count=9, link-credit=9, drain=false]
>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=8, last=8,
>> settled=true, state=@modified(39) [delivery-failed=false,
>> undeliverable-here=false]]
>> [0x55ee3ab25570]:0 <- @transfer(20) [handle=0, delivery-id=9,
>> delivery-tag=b"\x00\x00\x00\x09", message-format=0, settled=false,
>> more=false] (85) "\x00Sp\xc0\x06\x04BP\x04@A\x0
>> 0Sr\xd1\x00\x00\x00\x07\x00\x00\x00\x02\xa1\x00@\x00Ss\xd0\
>> x00\x00\x00"\x00\x00\x00\x0d@@@@@@@@\x83\x00\x00\x00\x00\
>> x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@R\x00@\x00Sw\xa1\x0ctest
>> message"
>> [0x55ee3ab25570]:0 -> @disposition(21) [role=true, first=9, last=9,
>> settled=true, state=@modified(39) [delivery-failed=false,
>> undeliverable-here=false]]
>> [0x55ee3ab25570]:0 -> @detach(22) [handle=0, closed=true]
>> [0x55ee3ab25570]:0 -> @close(24) []
>> [0x55ee3ab25570]: -> EOS
>> [0x55ee3ab25570]:0 <- @detach(22) [handle=0, closed=true]
>> [0x55ee3ab25570]:0 <- @close(24) []
>> [0x55ee3ab25570]: <- EOS
>>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>