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 > >