qpid-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rob Godfrey <rob.j.godf...@gmail.com>
Subject Re: [Qpid Dispatch] Manage Dispatch router from Qpid Jms
Date Wed, 01 Feb 2017 20:21:03 GMT
We will definitely be wanting to support AMQP management using the JMS
client.  We are having a few discussions at the moment about more strictly
defining the requirements for management reply-tos/dynamic nodes and once
that is firmed up we would look to define a mechanism by which these can be
used from JMS.  There's a lot of work on both AMQP Management and AMQP
Addressing that we'll (wearing my OASIS hat here) be kicking off in the
coming weeks.

Hope this helps,
Rob

On 1 February 2017 at 19:02, Adel Boutros <Adelboutros@live.com> wrote:

> Thanks Robbie for taking a look.
>
>
> We can live with a real queue for now. However from the whole discussion,
> it seems what we are doing using JMS is not officially supported.
>
> To what extent are you going to commit to this support?
>
> Would it be dropped soon? Would it be officialised soon?
>
>
> What we like about JMS is the procedural calls when compared to Proton's
> reactive API.
>
>
> Regards,
>
> Adel
>
> ________________________________
> From: Robbie Gemmell <robbie.gemmell@gmail.com>
> Sent: Wednesday, February 1, 2017 5:07:02 PM
> To: users@qpid.apache.org
> Subject: Re: [Qpid Dispatch] Manage Dispatch router from Qpid Jms
>
> 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 <Adelboutros@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.gemmell@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.promail@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.gemmell@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.promail@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.godfrey@gmail.com>
> >>> > wrote:
> >>> >>
> >>> >> On 20 January 2017 at 21:45, Ganesh Murthy <gmurthy@redhat.com>
> wrote:
> >>> >>
> >>> >> >
> >>> >> >
> >>> >> > ----- Original Message -----
> >>> >> > > From: "Robbie Gemmell" <robbie.gemmell@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 <gsim@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-unsubscribe@qpid.apache.org
> >>> >> > > For additional commands, e-mail: users-help@qpid.apache.org
> >>> >> > >
> >>> >> > >
> >>> >> >
> >>> >> > ------------------------------------------------------------
> ---------
> >>> >> > To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org
> >>> >> > For additional commands, e-mail: users-help@qpid.apache.org
> >>> >> >
> >>> >> >
> >>> >
> >>> >
> >>> >
> >>> >
> >>> > ------------------------------------------------------------
> ---------
> >>> > To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org
> >>> > For additional commands, e-mail: users-help@qpid.apache.org
> >>>
> >>> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org
> >>> For additional commands, e-mail: users-help@qpid.apache.org
> >>>
> >>>
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org
> > For additional commands, e-mail: users-help@qpid.apache.org
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org
> For additional commands, e-mail: users-help@qpid.apache.org
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message