On 6 February 2017 at 19:03, Robbie Gemmell <robbie.gemm...@gmail.com>
wrote:

> On 6 February 2017 at 17:50, Rob Godfrey <rob.j.godf...@gmail.com> wrote:
> > On 6 February 2017 at 18:44, Ted Ross <tr...@redhat.com> wrote:
> >
> >> It seems odd that the client creates a _sender_ to the temporary queue
> >> that it will never send messages _to_ but will receive messages _from_.
> >>
> >>
> > This is because JMS semantics require the temporary node to have a
> lifetime
> > scoped to the session (not a link), so the JMS client has to create a
> > synthetic link which it uses simply to manage the lifetime of the dynamic
> > node.  In order to not cause unintentional assigning of messages to a
> link
> > that will never actually be used for consumption, a sending link is used.
> > Note that in general JMS would expect that you should be able to send to
> a
> > temporary queue created in this way (since the point of temporary queues
> is
> > to use as a reply to)
> >
>
> Not really important here, but the lifetime is scoped to the
> Connection, not Session (agghhh JMS... :P)
>

That's what I thought I was typing... obviously my fingers were not
cooperating with my brain at that point :-)

-- Rob


>
> >
> >> Anyway, when the client creates a receiver with a dynamic source (and no
> >> dynamic-node-properties), the router will accept the link and assign a
> >> temporary address as the source.  This is only useful in this use case
> if
> >> the broker has a way of knowing that the temporary address is reachable
> via
> >> the router network.
> >>
> >> There is a way to route dynamic termini to a broker.  If an
> >> x-opt-qd.address property is included in the dynamic-node-properties,
> this
> >> address will be used to route the attach to the broker.  I've never
> tested
> >> this with a dynamic target in a sender.  It might not work.
> >
> >
> > And this really isn't something you'd be expecting a generic client (like
> > the JMS client) to know :-)
> >
> > -- Rob
> >
> >
> >>
> >>
> >> -Ted
> >>
> >>
> >> On 02/01/2017 11:07 AM, Robbie Gemmell wrote:
> >>
> >>> I've had a look at this. It would seem that Dispatch doesn't like what
> >>> the client is doing for createTemporaryQueue, but doesn't fail in a
> >>> very nice way, and the client then doesnt notice that things have gone
> >>> south in a somewhat unexpected way.
> >>>
> >>> The client opens a sending link with 'dynamic' target in order to
> >>> create a dynamic node for use as a TemporaryQueue address/destination
> >>> object, which specific consumers/producers are then created against by
> >>> the application. Dispatch doesn't seem to like that but erroneously
> >>> attaches the link 'successfully', though doesnt set a target address
> >>> as is expected. The client then doesnt notice this happened (its
> >>> checking for the link being refused, which it wasn't), allowing the
> >>> application to proceed as far as creating consumers/procuers using the
> >>> TemporaryQueue object, with creation of the e.g Consumer then failing
> >>> since the attach doesnt contain the needed information and leads to
> >>> Dispatch detaching it with the error (though it again doesnt actually
> >>> indicate its refusing the link during the attach response, as it
> >>> probably should have in this case).
> >>>
> >>> Making the client detect the current failure and having it throw an
> >>> aexception from createTemporaryQueue is simple enough.
> >>>
> >>> Hacking the client to use a dynamic recieving link instead, an address
> >>> was returned by Dispatch in the attach response as expected, however a
> >>> consumer on the resulting TemporaryQueue object using this address
> >>> still didnt get the message I sent to the same place. If I also gave
> >>> some credit on the link backing the TemporaryQeueue object itself then
> >>> that link gets sent the message by Dispatch, though this of no use for
> >>> the JMS client.
> >>>
> >>> Needs some more investigation, and I'll need to discuss with some
> >>> folks more familiar with Dispatch.
> >>>
> >>> Robbie
> >>>
> >>> On 26 January 2017 at 13:39, Adel Boutros <adelbout...@live.com>
> wrote:
> >>>
> >>>> Hello Robbie,
> >>>>
> >>>>
> >>>> I replaced the "createQueue" with "createTemporaryQueue" for the reply
> >>>> consumer and activated PN_TRACE_FRM on Dispatch Router and JMS Client.
> >>>>
> >>>>
> >>>> PS: As Rabih stated before, we are using the same connection and same
> >>>> session to create the  JMSProducer for the request and the
> JMSConsumer for
> >>>> the reply.
> >>>>
> >>>>
> >>>> Exception
> >>>> -------------------
> >>>> javax.jms.IllegalStateException: The MessageConsumer was closed due
> to
> >>>> an unrecoverable error.
> >>>> at org.apache.qpid.jms.JmsMessageConsumer.checkClosed(JmsMessag
> >>>> eConsumer.java:330)
> >>>> at org.apache.qpid.jms.JmsMessageConsumer.receive(JmsMessageCon
> >>>> sumer.java:196)
> >>>> at murex.messaging.client.JmsTest.main(JmsTest.java:57)
> >>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >>>> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce
> >>>> ssorImpl.java:62)
> >>>> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe
> >>>> thodAccessorImpl.java:43)
> >>>> at java.lang.reflect.Method.invoke(Method.java:498)
> >>>> at com.intellij.rt.execution.application.AppMain.main(
> AppMain.java:147)
> >>>> Caused by: javax.jms.JMSException: No route to the destination node
> >>>> [condition = qd:no-route-to-dest]
> >>>> at org.apache.qpid.jms.provider.amqp.AmqpSupport.convertToExcep
> >>>> tion(AmqpSupport.java:150)
> >>>> at org.apache.qpid.jms.provider.amqp.AmqpSupport.convertToExcep
> >>>> tion(AmqpSupport.java:105)
> >>>> at org.apache.qpid.jms.provider.amqp.AmqpAbstractResource.remot
> >>>> elyClosed(AmqpAbstractResource.java:147)
> >>>> at org.apache.qpid.jms.provider.amqp.AmqpAbstractResource.proce
> >>>> ssRemoteClose(AmqpAbstractResource.java:251)
> >>>> at org.apache.qpid.jms.provider.amqp.AmqpProvider.processUpdate
> >>>> s(AmqpProvider.java:795)
> >>>> at org.apache.qpid.jms.provider.amqp.AmqpProvider.access$1900(A
> >>>> mqpProvider.java:90)
> >>>> at org.apache.qpid.jms.provider.amqp.AmqpProvider$17.run(AmqpPr
> >>>> ovider.java:699)
> >>>> at java.util.concurrent.Executors$RunnableAdapter.call(
> >>>> Executors.java:511)
> >>>> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> >>>> at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFu
> >>>> tureTask.access$201(ScheduledThreadPoolExecutor.java:180)
> >>>> at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFu
> >>>> tureTask.run(ScheduledThreadPoolExecutor.java:293)
> >>>> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool
> >>>> Executor.java:1142)
> >>>> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo
> >>>> lExecutor.java:617)
> >>>> at java.lang.Thread.run(Thread.java:745)
> >>>>
> >>>>
> >>>> -------------------
> >>>> Dispatch Router (PN_TRACE_FRM=1)
> >>>> -------------------
> >>>>
> >>>> [832220]:  <- SASL
> >>>> [832220]:  -> SASL
> >>>> [832220]:0 -> @sasl-mechanisms(64) [sasl-server-mechanisms=@PN_SY
> >>>> MBOL[:ANONYMOUS]]
> >>>> [832220]:0 <- @sasl-init(65) [mechanism=:ANONYMOUS,
> >>>> initial-response=b"", hostname="host-name"]
> >>>> [832220]:0 -> @sasl-outcome(68) [code=0]
> >>>> [832220]:  <- AMQP
> >>>> [832220]:0 <- @open(16) [container-id="ID:9d96ddb8-
> a334-44c3-954a-2dd910161411:1",
> >>>> hostname="host-name", max-frame-size=1048576, channel-max=32767,
> >>>> idle-time-out=30000, desired-capabilities=@PN_SYMBO
> >>>> L[:"sole-connection-for-container"], properties={:product="QpidJMS",
> >>>> :version="0.11.1", :platform="JVM: 1.8.0_111, 25.111-b14, Oracle
> >>>> Corporation, OS: Windows 7, 6.1, amd64"}]
> >>>> [832220]:  -> AMQP
> >>>> [832220]:0 -> @open(16) [container-id="router.10200",
> >>>> max-frame-size=16384, channel-max=32767, idle-time-out=8000,
> >>>> offered-capabilities=:"ANONYMOUS-RELAY", properties={:product="qpid-
> dispatch-router",
> >>>> :version="0.7.0"}]
> >>>> [832220]:0 <- @begin(17) [next-outgoing-id=1, incoming-window=2047,
> >>>> outgoing-window=2147483647, handle-max=65535]
> >>>> [832220]:0 -> @begin(17) [remote-channel=0, next-outgoing-id=0,
> >>>> incoming-window=61, outgoing-window=2147483647]
> >>>> [832220]:1 <- @begin(17) [next-outgoing-id=1, incoming-window=2047,
> >>>> outgoing-window=2147483647, handle-max=65535]
> >>>> [832220]:1 -> @begin(17) [remote-channel=1, next-outgoing-id=0,
> >>>> incoming-window=61, outgoing-window=2147483647]
> >>>> [832220]:1 <- @attach(18) [name="qpid-jms:sender:ID:8ec7
> >>>> 55cd-dc3f-47cc-9f39-f5d15647fe80:1:1:1:$management", handle=0,
> >>>> role=false, snd-settle-mode=0, rcv-settle-mode=0, source=@source(40)
> >>>> [address="ID:8ec755cd-dc3f-47cc-9f39-f5d15647fe80:1:1:1", durable=0,
> >>>> expiry-policy=:"session-end", timeout=0, dynamic=false,
> >>>> outcomes=@PN_SYMBOL[:"amqp:accepted:list", :"amqp:rejected:list"]],
> >>>> target=@target(41) [address="$management", durable=0,
> >>>> expiry-policy=:"session-end", timeout=0, dynamic=false,
> >>>> capabilities=@PN_SYMBOL[:queue]], incomplete-unsettled=false,
> >>>> initial-delivery-count=0]
> >>>> [832220]:1 -> @attach(18) [name="qpid-jms:sender:ID:8ec7
> >>>> 55cd-dc3f-47cc-9f39-f5d15647fe80:1:1:1:$management", handle=0,
> >>>> role=true, snd-settle-mode=2, rcv-settle-mode=0, source=@source(40)
> >>>> [address="ID:8ec755cd-dc3f-47cc-9f39-f5d15647fe80:1:1:1", durable=0,
> >>>> timeout=0, dynamic=false, outcomes=@PN_SYMBOL[:"amqp:accepted:list",
> >>>> :"amqp:rejected:list"]], target=@target(41) [address="$management",
> >>>> durable=0, timeout=0, dynamic=false, capabilities=@PN_SYMBOL[:
> queue]],
> >>>> initial-delivery-count=0, max-message-size=0]
> >>>> [832220]:1 -> @flow(19) [next-incoming-id=1, incoming-window=61,
> >>>> next-outgoing-id=0, outgoing-window=2147483647, handle=0,
> delivery-count=0,
> >>>> link-credit=250, drain=false]
> >>>> [832220]:0 <- @attach(18) [name="qpid-jms:temp-queue-cre
> >>>> ator:ID:8ec755cd-dc3f-47cc-9f39-f5d15647fe80:1:1", handle=0,
> >>>> role=false, snd-settle-mode=0, rcv-settle-mode=0, source=@source(40)
> [],
> >>>> target=@target(41) [durable=0, expiry-policy=:"link-detach",
> timeout=0,
> >>>> dynamic=true, dynamic-node-properties={:"lif
> >>>> etime-policy"=@delete-on-close(43) []}, capabilities=@PN_SYMBOL[:"
> temporary-queue"]],
> >>>> incomplete-unsettled=false, initial-delivery-count=0]
> >>>> [832220]:0 -> @attach(18) [name="qpid-jms:temp-queue-cre
> >>>> ator:ID:8ec755cd-dc3f-47cc-9f39-f5d15647fe80:1:1", handle=0,
> role=true,
> >>>> snd-settle-mode=2, rcv-settle-mode=0, source=@source(40) [durable=0,
> >>>> timeout=0, dynamic=false], target=@target(41) [durable=0,
> >>>> expiry-policy=:"link-detach", timeout=0, dynamic=true,
> >>>> dynamic-node-properties={:"lifetime-policy"=@delete-on-close(43) []},
> >>>> capabilities=@PN_SYMBOL[:"temporary-queue"]],
> initial-delivery-count=0,
> >>>> max-message-size=0]
> >>>> [832220]:0 -> @flow(19) [next-incoming-id=1, incoming-window=61,
> >>>> next-outgoing-id=0, outgoing-window=2147483647, handle=0,
> delivery-count=0,
> >>>> link-credit=250, drain=false]
> >>>> [832220]:1 <- @attach(18) [name="qpid-jms:receiver:ID:8e
> >>>> c755cd-dc3f-47cc-9f39-f5d15647fe80:1:1:1:null", handle=1, role=true,
> >>>> snd-settle-mode=0, rcv-settle-mode=0, source=@source(40) [durable=0,
> >>>> expiry-policy=:"link-detach", timeout=0, dynamic=false,
> >>>> default-outcome=@modified(39) [delivery-failed=true],
> >>>> outcomes=@PN_SYMBOL[:"amqp:accepted:list", :"amqp:rejected:list",
> >>>> :"amqp:released:list", :"amqp:modified:list"],
> >>>> capabilities=@PN_SYMBOL[:"temporary-queue"]], target=@target(41) []]
> >>>> [832220]:1 -> @attach(18) [name="qpid-jms:receiver:ID:8e
> >>>> c755cd-dc3f-47cc-9f39-f5d15647fe80:1:1:1:null", handle=1, role=false,
> >>>> snd-settle-mode=2, rcv-settle-mode=0, source=@source(40) [durable=0,
> >>>> timeout=0, dynamic=false], target=@target(41) [durable=0, timeout=0,
> >>>> dynamic=false], initial-delivery-count=0, max-message-size=0]
> >>>> [832220]:1 -> @detach(22) [handle=1, closed=true, error=@error(29)
> >>>> [condition=:"qd:no-route-to-dest", description="No route to the
> >>>> destination node"]]
> >>>> [832220]:1 <- @detach(22) [handle=1, closed=true]
> >>>> [832220]:1 <- @transfer(20) [handle=0, delivery-id=0,
> delivery-tag=b"0",
> >>>> message-format=0] (312) "\x00Sp\xc0\x02\x01A\x00Sr\xc1
> >>>> )\x04\xa3\x0ex-opt-jms-destQ\x00\xa3\x12x-opt-jms-msg-
> >>>> typeQ\x01\x00Ss\xc0O\x0a\xa1/ID:8ec755cd-dc3f-47cc-9f39-
> >>>> f5d15647fe80:1:1:1-1@\xa1\x0b$management@@@@@@\x83\x00\x00\
> >>>> x01Y\xda\xf2\xa6'\x00St\xc1U\x06\xa1\x04name\xa1\x0frabih.
> >>>> connector\xa1\x04type\xa1"org.apache.qpid.dispatch.
> >>>> connector\xa1\x09operation\xa1\x06CREATE\x00Sw\xc1P\x08\
> >>>> xa1\x04role\xa1\x0froute-container\xa1\x04port\xa1\
> >>>> x04port\xa1\x04name\xa1\x0frabih.connector\xa1\
> >>>> x04addr\xa1\x0dbrokerMachine"
> >>>> [832220]:1 -> @flow(19) [next-incoming-id=2, incoming-window=61,
> >>>> next-outgoing-id=0, outgoing-window=2147483647, handle=0,
> delivery-count=1,
> >>>> link-credit=250, drain=false]
> >>>> [832220]:1 -> @disposition(21) [role=true, first=0, last=0,
> >>>> settled=true, state=@accepted(36) []]
> >>>> [832220]:0 <- @close(24) []
> >>>> [832220]:  <- EOS
> >>>> [832220]:0 -> @close(24) []
> >>>> [832220]:  -> EOS
> >>>> Closed x.x.x.x:8961
> >>>> Unexpected poll events: 0020 on x.x.x.x:8961
> >>>> Unexpected poll events: 0020 on x.x.x.x:8961
> >>>>
> >>>> ------------------
> >>>> JMS Client (PN_TRACE_FRM=1)
> >>>> ------------------
> >>>> [1244186219:0] -> Open{ containerId='ID:da8ce84a-c69b-
> 4a22-9b22-69d27a017a83:1',
> >>>> hostname='host-name', maxFrameSize=1048576, channelMax=32767,
> >>>> idleTimeOut=30000, outgoingLocales=null, incomingLocales=null,
> >>>> offeredCapabilities=null, desiredCapabilities=[sole-
> connection-for-container],
> >>>> properties={product=QpidJMS, version=0.11.1, platform=JVM: 1.8.0_111,
> >>>> 25.111-b14, Oracle Corporation, OS: Windows 7, 6.1, amd64}}
> >>>> [1244186219:0] <- Open{ containerId='router.10200', hostname='null',
> >>>> maxFrameSize=16384, channelMax=32767, idleTimeOut=8000,
> >>>> outgoingLocales=null, incomingLocales=null, offeredCapabilities=[
> ANONYMOUS-RELAY],
> >>>> desiredCapabilities=null, properties={product=qpid-dispatch-router,
> >>>> version=0.7.0}}
> >>>> [1244186219:0] -> Begin{remoteChannel=null, nextOutgoingId=1,
> >>>> incomingWindow=2047, outgoingWindow=2147483647, handleMax=65535,
> >>>> offeredCapabilities=null, desiredCapabilities=null, properties=null}
> >>>> [1244186219:0] <- Begin{remoteChannel=0, nextOutgoingId=0,
> >>>> incomingWindow=61, outgoingWindow=2147483647, handleMax=4294967295,
> >>>> offeredCapabilities=null, desiredCapabilities=null, properties=null}
> >>>> [1244186219:1] -> Begin{remoteChannel=null, nextOutgoingId=1,
> >>>> incomingWindow=2047, outgoingWindow=2147483647, handleMax=65535,
> >>>> offeredCapabilities=null, desiredCapabilities=null, properties=null}
> >>>> [1244186219:1] <- Begin{remoteChannel=1, nextOutgoingId=0,
> >>>> incomingWindow=61, outgoingWindow=2147483647, handleMax=4294967295,
> >>>> offeredCapabilities=null, desiredCapabilities=null, properties=null}
> >>>> [1244186219:1] -> Attach{name='qpid-jms:sender:I
> >>>> D:53f2be62-ad72-4193-a824-3293ffc57168:1:1:1:$management', handle=0,
> >>>> role=SENDER, sndSettleMode=UNSETTLED, rcvSettleMode=FIRST,
> >>>> source=Source{address='ID:53f2be62-ad72-4193-a824-
> 3293ffc57168:1:1:1',
> >>>> durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false,
> >>>> dynamicNodeProperties=null, distributionMode=null, filter=null,
> >>>> defaultOutcome=null, outcomes=[amqp:accepted:list,
> amqp:rejected:list],
> >>>> capabilities=null}, target=Target{address='$management',
> durable=NONE,
> >>>> expiryPolicy=SESSION_END, timeout=0, dynamic=false,
> >>>> dynamicNodeProperties=null, capabilities=[queue]}, unsettled=null,
> >>>> incompleteUnsettled=false, initialDeliveryCount=0,
> maxMessageSize=null,
> >>>> offeredCapabilities=null, desiredCapabilities=null, properties=null}
> >>>> [1244186219:1] <- Attach{name='qpid-jms:sender:I
> >>>> D:53f2be62-ad72-4193-a824-3293ffc57168:1:1:1:$management', handle=0,
> >>>> role=RECEIVER, sndSettleMode=MIXED, rcvSettleMode=FIRST,
> >>>> source=Source{address='ID:53f2be62-ad72-4193-a824-
> 3293ffc57168:1:1:1',
> >>>> durable=NONE, expiryPolicy=SESSION_END, timeout=0, dynamic=false,
> >>>> dynamicNodeProperties=null, distributionMode=null, filter=null,
> >>>> defaultOutcome=null, outcomes=[amqp:accepted:list,
> amqp:rejected:list],
> >>>> capabilities=null}, target=Target{address='$management',
> durable=NONE,
> >>>> expiryPolicy=SESSION_END, timeout=0, dynamic=false,
> >>>> dynamicNodeProperties=null, capabilities=[queue]}, unsettled=null,
> >>>> incompleteUnsettled=false, initialDeliveryCount=0, maxMessageSize=0,
> >>>> offeredCapabilities=null, desiredCapabilities=null, properties=null}
> >>>> [1244186219:1] <- Flow{nextIncomingId=1, incomingWindow=61,
> >>>> nextOutgoingId=0, outgoingWindow=2147483647, handle=0,
> deliveryCount=0,
> >>>> linkCredit=250, available=null, drain=false, echo=false,
> properties=null}
> >>>> [1244186219:0] -> Attach{name='qpid-jms:temp-que
> >>>> ue-creator:ID:53f2be62-ad72-4193-a824-3293ffc57168:1:1', handle=0,
> >>>> role=SENDER, sndSettleMode=UNSETTLED, rcvSettleMode=FIRST,
> >>>> source=Source{address='null', durable=NONE, expiryPolicy=SESSION_END,
> >>>> timeout=0, dynamic=false, dynamicNodeProperties=null,
> >>>> distributionMode=null, filter=null, defaultOutcome=null,
> outcomes=null,
> >>>> capabilities=null}, target=Target{address='null', durable=NONE,
> >>>> expiryPolicy=LINK_DETACH, timeout=0, dynamic=true,
> >>>> dynamicNodeProperties={lifetime-policy=DeleteOnClose{}},
> >>>> capabilities=[temporary-queue]}, unsettled=null,
> >>>> incompleteUnsettled=false, initialDeliveryCount=0,
> maxMessageSize=null,
> >>>> offeredCapabilities=null, desiredCapabilities=null, properties=null}
> >>>> [1244186219:0] <- Attach{name='qpid-jms:temp-que
> >>>> ue-creator:ID:53f2be62-ad72-4193-a824-3293ffc57168:1:1', handle=0,
> >>>> role=RECEIVER, sndSettleMode=MIXED, rcvSettleMode=FIRST,
> >>>> source=Source{address='null', durable=NONE, expiryPolicy=SESSION_END,
> >>>> timeout=0, dynamic=false, dynamicNodeProperties=null,
> >>>> distributionMode=null, filter=null, defaultOutcome=null,
> outcomes=null,
> >>>> capabilities=null}, target=Target{address='null', durable=NONE,
> >>>> expiryPolicy=LINK_DETACH, timeout=0, dynamic=true,
> >>>> dynamicNodeProperties={lifetime-policy=DeleteOnClose{}},
> >>>> capabilities=[temporary-queue]}, unsettled=null,
> >>>> incompleteUnsettled=false, initialDeliveryCount=0, maxMessageSize=0,
> >>>> offeredCapabilities=null, desiredCapabilities=null, properties=null}
> >>>> [1244186219:0] <- Flow{nextIncomingId=1, incomingWindow=61,
> >>>> nextOutgoingId=0, outgoingWindow=2147483647, handle=0,
> deliveryCount=0,
> >>>> linkCredit=250, available=null, drain=false, echo=false,
> properties=null}
> >>>> [1244186219:1] -> Attach{name='qpid-jms:receiver
> >>>> :ID:53f2be62-ad72-4193-a824-3293ffc57168:1:1:1:null', handle=1,
> >>>> role=RECEIVER, sndSettleMode=UNSETTLED, rcvSettleMode=FIRST,
> >>>> source=Source{address='null', durable=NONE, expiryPolicy=LINK_DETACH,
> >>>> timeout=0, dynamic=false, dynamicNodeProperties=null,
> >>>> distributionMode=null, filter=null, defaultOutcome=Modified{
> deliveryFailed=true,
> >>>> undeliverableHere=null, messageAnnotations=null},
> >>>> outcomes=[amqp:accepted:list, amqp:rejected:list, amqp:released:list,
> >>>> amqp:modified:list], capabilities=[temporary-queue]},
> >>>> target=Target{address='null', durable=NONE, expiryPolicy=SESSION_END,
> >>>> timeout=0, dynamic=false, dynamicNodeProperties=null,
> capabilities=null},
> >>>> unsettled=null, incompleteUnsettled=false, initialDeliveryCount=null,
> >>>> maxMessageSize=null, offeredCapabilities=null,
> desiredCapabilities=null,
> >>>> properties=null}
> >>>> [1244186219:1] <- Attach{name='qpid-jms:receiver
> >>>> :ID:53f2be62-ad72-4193-a824-3293ffc57168:1:1:1:null', handle=1,
> >>>> role=SENDER, sndSettleMode=MIXED, rcvSettleMode=FIRST,
> >>>> source=Source{address='null', durable=NONE, expiryPolicy=SESSION_END,
> >>>> timeout=0, dynamic=false, dynamicNodeProperties=null,
> >>>> distributionMode=null, filter=null, defaultOutcome=null,
> outcomes=null,
> >>>> capabilities=null}, target=Target{address='null', durable=NONE,
> >>>> expiryPolicy=SESSION_END, timeout=0, dynamic=false,
> >>>> dynamicNodeProperties=null, capabilities=null}, unsettled=null,
> >>>> incompleteUnsettled=false, initialDeliveryCount=0, maxMessageSize=0,
> >>>> offeredCapabilities=null, desiredCapabilities=null, properties=null}
> >>>> [1244186219:1] <- Detach{handle=1, closed=true,
> >>>> error=Error{condition=qd:no-route-to-dest, description='No route to
> the
> >>>> destination node', info=null}}
> >>>> [1244186219:1] -> Detach{handle=1, closed=true, error=null}
> >>>> [1244186219:1] -> Transfer{handle=0, deliveryId=0, deliveryTag=0,
> >>>> messageFormat=0, settled=null, more=false, rcvSettleMode=null,
> state=null,
> >>>> resume=false, aborted=false, batchable=false} (312)
> >>>> "\x00Sp\xc0\x02\x01A\x00Sr\xc1)\x04\xa3\x0ex-opt-jms-destQ\
> >>>> x00\xa3\x12x-opt-jms-msg-typeQ\x01\x00Ss\xc0O\x0a\xa1/
> >>>> ID:53f2be62-ad72-4193-a824-3293ffc57168:1:1:1-1@\xa1\x0b$management@
> >>>> @@@@@\x83\x00\x00\x01Y\xda\xf4\xd7p\x00St\xc1U\
> >>>> x06\xa1\x04name\xa1\x0frabih.connector\xa1\x04type\xa1"org.
> >>>> apache.qpid.dispatch.connector\xa1\x09operation\
> >>>> xa1\x06CREATE\x00Sw\xc1P\x08\xa1\x04role\xa1\x0froute-
> >>>> container\xa1\x04port\xa1\x04port\xa1\x04name\xa1\
> >>>> x0frabih.connector\xa1\x04addr\xa1\x0dbrokerMachine"
> >>>> [1244186219:1] <- Flow{nextIncomingId=2, incomingWindow=61,
> >>>> nextOutgoingId=0, outgoingWindow=2147483647, handle=0,
> deliveryCount=1,
> >>>> linkCredit=250, available=null, drain=false, echo=false,
> properties=null}
> >>>> [1244186219:1] <- Disposition{role=RECEIVER, first=0, last=0,
> >>>> settled=true, state=Accepted{}, batchable=false}
> >>>> [1244186219:0] -> Close{error=null}
> >>>> [1244186219:0] <- Close{error=null}
> >>>>
> >>>> Regards,
> >>>>
> >>>> Adel
> >>>>
> >>>> ________________________________
> >>>> From: Robbie Gemmell <robbie.gemm...@gmail.com>
> >>>> Sent: Tuesday, January 24, 2017 7:33:32 PM
> >>>> To: users@qpid.apache.org
> >>>> Subject: Re: [Qpid Dispatch] Manage Dispatch router from Qpid Jms
> >>>>
> >>>> That looks fine at first glance. Its possible there is an issue in
> >>>> there needing looked it. I am travelling this week so may not get to
> >>>> look until afterwards, but will try to give things a look at. If you
> >>>> could give more detail on the exception and maybe a protocol trace
> >>>> that might be useful.
> >>>>
> >>>> Robbie
> >>>>
> >>>> On 24 January 2017 at 13:14, Rabih M <rabih.prom...@gmail.com> wrote:
> >>>>
> >>>>> Hello Robbie,
> >>>>>
> >>>>> Thanks for you for your answer.
> >>>>> I will try the solutions you proposed.
> >>>>>
> >>>>> I need just need one clarification. Concerning the Jms, I already
> tried
> >>>>> to
> >>>>> use a temporary queue but it didn't work. May be i am using it wrong.
> >>>>> Here
> >>>>> is what i did:
> >>>>>
> >>>>> ...
> >>>>> Session session = connection.createSession(false,
> >>>>> Session.AUTO_ACKNOWLEDGE);
> >>>>> Queue queue = session.createQueue("$management");
> >>>>> MessageProducer producer = session.createProducer(queue);
> >>>>>
> >>>>> Queue tempDest = session.createTemporaryQueue();
> >>>>> MessageConsumer responseConsumer = session.createConsumer(tempDest);
> >>>>> connection.start();
> >>>>>
> >>>>> ObjectMessage objectMessage = session.createObjectMessage();
> >>>>> objectMessage.setJMSReplyTo(tempDest);
> >>>>> //fill the rest of the parameters ...
> >>>>> producer.send(objectMessage);
> >>>>> ObjectMessage replyMessage = (ObjectMessage)
> >>>>> responseConsumer.receive(1000);
> >>>>> ...
> >>>>>
> >>>>> I was getting an exception on the .receive() from the dispatch router
> >>>>> saying that the reply-to address is bad...
> >>>>> Should i create the temporary queue and the consumer from a different
> >>>>> session then the producer?
> >>>>>
> >>>>> Best regards,
> >>>>> Rabih
> >>>>>
> >>>>>
> >>>>> On Tue, Jan 24, 2017 at 5:37 PM, Robbie Gemmell <
> >>>>> robbie.gemm...@gmail.com>
> >>>>> wrote:
> >>>>>
> >>>>> The session.createTemporaryQueue(); method is how JMS creates
> >>>>>> temporary destinations for use in reply-to scenarios. The dispatch
> >>>>>> tools will be doing essentially the same thing under the covers for
> >>>>>> theirs.
> >>>>>>
> >>>>>> Both work by creating a 'dynamic' link attachment, with the server
> >>>>>> returning an address for the dynamic attach to the client. One key
> >>>>>> difference is with JMS you create the temporary destination (for
> which
> >>>>>> the client uses a dynamic sender link to create), then separately
> >>>>>> create a receiver using it (and in turn the address associated with
> >>>>>> it), whereas non-JMS client/tools will typically just create a
> single
> >>>>>> dynamic receiver link and use its address for the reply-to.
> >>>>>>
> >>>>>> For proton-j, there aren't any examples for this, but you you
> >>>>>> essentially would change the link opening to not specify an address,
> >>>>>> and instead set the source(for a receiver) or target (for a sender)
> to
> >>>>>> be 'dynamic'. You would then inspect the remoteSource or
> remoteTarget
> >>>>>> once the link had been reemotely attached, and get its
> >>>>>> (server-generated) address, then use this as your reply-to.
> >>>>>>
> >>>>>> Robbie
> >>>>>>
> >>>>>> On 23 January 2017 at 11:00, Rabih M <rabih.prom...@gmail.com>
> wrote:
> >>>>>>
> >>>>>>> Hello,
> >>>>>>>
> >>>>>>> When I added to the JMS test the ".setJMSReplyTo()" queue, like you
> >>>>>>> suggested, it worked.
> >>>>>>> But I cheated a little to make it work because I did not find a
> way in
> >>>>>>>
> >>>>>> JMS
> >>>>>>
> >>>>>>> to create a local queue. So I created a queue on the qpid-dispatch
> and
> >>>>>>>
> >>>>>> read
> >>>>>>
> >>>>>>> the result from it. You can check the attached code.
> >>>>>>>
> >>>>>>> Is there any way using qpid-jms to create a local queue on the
> client
> >>>>>>>
> >>>>>> side
> >>>>>>
> >>>>>>> to serve as a reply to address?
> >>>>>>>
> >>>>>>> For the proton-j test, I have the same question as above. I saw
> that
> >>>>>>> it
> >>>>>>>
> >>>>>> can
> >>>>>>
> >>>>>>> be done with the C++ API. Are there any examples for proton-j or
> >>>>>>>
> >>>>>> something
> >>>>>>
> >>>>>>> that can help me?
> >>>>>>>
> >>>>>>> I saw may be in proton we don't need a local queue, may be we can
> get
> >>>>>>> the
> >>>>>>> address of the consumer directly and pass it in reply-to field. Is
> it
> >>>>>>> correct?
> >>>>>>>
> >>>>>>> Thanks,
> >>>>>>> Rabih
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> On Fri, Jan 20, 2017 at 10:18 PM, Rob Godfrey <
> >>>>>>> rob.j.godf...@gmail.com>
> >>>>>>> wrote:
> >>>>>>>
> >>>>>>>>
> >>>>>>>> On 20 January 2017 at 21:45, Ganesh Murthy <gmur...@redhat.com>
> >>>>>>>> wrote:
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>>
> >>>>>>>>> ----- Original Message -----
> >>>>>>>>>
> >>>>>>>>>> From: "Robbie Gemmell" <robbie.gemm...@gmail.com>
> >>>>>>>>>> To: users@qpid.apache.org
> >>>>>>>>>> Sent: Friday, January 20, 2017 2:18:45 PM
> >>>>>>>>>> Subject: Re: [Qpid Dispatch] Manage Dispatch router from Qpid
> Jms
> >>>>>>>>>>
> >>>>>>>>>> On 20 January 2017 at 19:06, Gordon Sim <g...@redhat.com>
> wrote:
> >>>>>>>>>>
> >>>>>>>>>>> On 20/01/17 18:40, Rabih M wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> I inserted the map directly into the ObjectMessage like you
> told
> >>>>>>>>>>>>
> >>>>>>>>>>> me
> >>>>>>
> >>>>>>> Robbie and it worked.
> >>>>>>>>>>>>
> >>>>>>>>>>>> But like the proton-j case, the connector is not being
> created on
> >>>>>>>>>>>> the
> >>>>>>>>>>>> Qpid-dispatch side.
> >>>>>>>>>>>> I attached the amqp communication into this mail.
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> The last frame in that file is incomplete (the previous error
> >>>>>>>>>>>
> >>>>>>>>>> regarding the
> >>>>>>>>>
> >>>>>>>>>> map body may or may not be a wireshark issue),but that last
> frame
> >>>>>>>>>>>
> >>>>>>>>>> is
> >>>>>>
> >>>>>>> likely
> >>>>>>>>>
> >>>>>>>>>> the response which would indicate the success or otherwise of
> the
> >>>>>>>>>>>
> >>>>>>>>>> frame. Is
> >>>>>>>>>
> >>>>>>>>>> there anything logged by the router?
> >>>>>>>>>>>
> >>>>>>>>>>> If you can, just running the router with PN_TRACE_FRM=1 is
> simpler
> >>>>>>>>>>> for
> >>>>>>>>>>>
> >>>>>>>>>> this
> >>>>>>>>>
> >>>>>>>>>> sort of thing in my view.
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>> As Gordon suggests, the proton trace logs might be more helpful.
> >>>>>>>>>> You
> >>>>>>>>>> can also do that with proton-j, and this the JMS client too
> since
> >>>>>>>>>> it
> >>>>>>>>>> uses proton-j.
> >>>>>>>>>>
> >>>>>>>>>> One key difference from the qdmanage case is you are not
> setting a
> >>>>>>>>>> reply-to value or correlation-id to use along with it. I don't
> know
> >>>>>>>>>>
> >>>>>>>>> if
> >>>>>>
> >>>>>>> the router cares about not being able to send a response or not
> >>>>>>>>>> though, but it might.
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> You could add the following to your dispatch router conf file
> >>>>>>>>> (qdrouterd.conf) and restart the router (This will enable trace
> >>>>>>>>>
> >>>>>>>> logging)
> >>>>>>
> >>>>>>>
> >>>>>>>>> log {
> >>>>>>>>>     module: DEFAULT
> >>>>>>>>>     enable: trace+
> >>>>>>>>>     output: /path/to/log/qdrouterd.log
> >>>>>>>>> }
> >>>>>>>>>
> >>>>>>>>> When you run your management request, you will see proton frame
> >>>>>>>>> trace
> >>>>>>>>> and
> >>>>>>>>> you will see additional logging out of the dispatch Python agent
> -
> >>>>>>>>> something like the following -
> >>>>>>>>>
> >>>>>>>>> Fri Jan 20 15:27:23 2017 AGENT (debug) Agent request
> >>>>>>>>> Message(address=None,
> >>>>>>>>> properties={'operation': 'CREATE', 'type':
> >>>>>>>>> 'org.apache.qpid.dispatch.connector',
> >>>>>>>>> 'name': 'rabih.connector'}, body={'port': '5673', 'role':
> >>>>>>>>> 'route-container', 'addr': 'broker-machine', 'name':
> >>>>>>>>>
> >>>>>>>> 'rabih.connector'},
> >>>>>>
> >>>>>>> reply_to='amqp:/_topo/0/Router.A/temp.i4H_ZOvee1xhGxx',
> >>>>>>>>> correlation_id=1L)
> >>>>>>>>> Fri Jan 20 15:27:23 2017 CONN_MGR (info) Configured Connector:
> >>>>>>>>> broker-machine:5673 proto=any, role=route-container
> >>>>>>>>> Fri Jan 20 15:27:23 2017 AGENT (debug) Add entity:
> >>>>>>>>> ConnectorEntity(addr=broker-machine, allowRedirect=True, cost=1,
> >>>>>>>>> host=127.0.0.1, identity=connector/127.0.0.1:
> 5673:rabih.connector,
> >>>>>>>>> idleTimeoutSeconds=16, maxFrameSize=16384, maxSessions=32768,
> >>>>>>>>> name=rabih.connector, port=5673, role=route-container,
> >>>>>>>>> stripAnnotations=both, type=org.apache.qpid.dispatch.connector,
> >>>>>>>>> verifyHostName=True)
> >>>>>>>>>
> >>>>>>>>> The Python management agent will not process your request if
> there
> >>>>>>>>> is
> >>>>>>>>>
> >>>>>>>> no
> >>>>>>
> >>>>>>> reply_to as seen here -
> >>>>>>>>>
> >>>>>>>>> https://github.com/apache/qpid-dispatch/blob/master/
> >>>>>>>>> python/qpid_dispatch_internal/management/agent.py#L822
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> Can I ask why the agent doesn't process the request?  Just
> because
> >>>>>>>> there
> >>>>>>>> is
> >>>>>>>> a reply-to doesn't mean that the sender will be around to actually
> >>>>>>>> hear
> >>>>>>>> the
> >>>>>>>> reply, so it seems a bit arbitrary to say that because we *know*
> the
> >>>>>>>> sender
> >>>>>>>> won't learn of the outcome that we won't do anything... The spec
> >>>>>>>> draft
> >>>>>>>> doesn't currently say anything about this (obviously it should
> do),
> >>>>>>>> but
> >>>>>>>>
> >>>>>>> my
> >>>>>>
> >>>>>>> expectation would certainly be that a request would be processed
> even
> >>>>>>>> if
> >>>>>>>> the replyTo address was not present (or ended up not routing
> >>>>>>>> anywhere).
> >>>>>>>> This is also how the Qpid Broker for Java implements this case.
> >>>>>>>>
> >>>>>>>> -- Rob
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Thanks.
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>> Robbie
> >>>>>>>>>>
> >>>>>>>>>> ------------------------------------------------------------
> >>>>>>>>>>
> >>>>>>>>> ---------
> >>>>>>
> >>>>>>> To unsubscribe, e-mail: users-unsubscr...@qpid.apache.org
> >>>>>>>>>> For additional commands, e-mail: users-h...@qpid.apache.org
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>> ------------------------------------------------------------
> >>>>>>>>> ---------
> >>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@qpid.apache.org
> >>>>>>>>> For additional commands, e-mail: users-h...@qpid.apache.org
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>> ------------------------------------------------------------
> ---------
> >>>>>>> To unsubscribe, e-mail: users-unsubscr...@qpid.apache.org
> >>>>>>> For additional commands, e-mail: users-h...@qpid.apache.org
> >>>>>>>
> >>>>>>
> >>>>>> ------------------------------------------------------------
> ---------
> >>>>>> To unsubscribe, e-mail: users-unsubscr...@qpid.apache.org
> >>>>>> For additional commands, e-mail: users-h...@qpid.apache.org
> >>>>>>
> >>>>>>
> >>>>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: users-unsubscr...@qpid.apache.org
> >>>> For additional commands, e-mail: users-h...@qpid.apache.org
> >>>>
> >>>>
> >>> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail: users-unsubscr...@qpid.apache.org
> >>> For additional commands, e-mail: users-h...@qpid.apache.org
> >>>
> >>>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscr...@qpid.apache.org
> >> For additional commands, e-mail: users-h...@qpid.apache.org
> >>
> >>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@qpid.apache.org
> For additional commands, e-mail: users-h...@qpid.apache.org
>
>

Reply via email to