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

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.

-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(JmsMessageConsumer.java:330)
at org.apache.qpid.jms.JmsMessageConsumer.receive(JmsMessageConsumer.java:196)
at murex.messaging.client.JmsTest.main(JmsTest.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.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.convertToException(AmqpSupport.java:150)
at 
org.apache.qpid.jms.provider.amqp.AmqpSupport.convertToException(AmqpSupport.java:105)
at 
org.apache.qpid.jms.provider.amqp.AmqpAbstractResource.remotelyClosed(AmqpAbstractResource.java:147)
at 
org.apache.qpid.jms.provider.amqp.AmqpAbstractResource.processRemoteClose(AmqpAbstractResource.java:251)
at 
org.apache.qpid.jms.provider.amqp.AmqpProvider.processUpdates(AmqpProvider.java:795)
at 
org.apache.qpid.jms.provider.amqp.AmqpProvider.access$1900(AmqpProvider.java:90)
at org.apache.qpid.jms.provider.amqp.AmqpProvider$17.run(AmqpProvider.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$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.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_SYMBOL[: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_SYMBOL[:"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:8ec755cd-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:8ec755cd-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-creator: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={:"lifetime-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-creator: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:8ec755cd-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:8ec755cd-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:ID: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:ID: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-queue-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-queue-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

Reply via email to