Thanks, Gordon. This seems to be the likely cause of the problem.

The Messenger API doesn¹t seem to allow you to specify how connections are
made or managed. Perhaps this is the root of my problem. I can understand
how ActiveMQ being JMS-centric would assume that all the sessions for an
application instance are multiplexed over a single connection. Does the
Messenger code then assume that every address should map to a unique
connection? If so, it means I cannot connect directly to ActiveMQ when the
application uses more than one destination on a broker.

Would this scenario work if the application communicates to ActiveMQ via a
dispatch router? Is it possible to configure the router to have multiple
application connections and a single connection between the router and the
broker?

-Jimmy

On 10/3/14, 3:44 AM, "Gordon Sim" <g...@redhat.com> wrote:

>On 10/02/2014 10:39 PM, Martin, Jimmy wrote:
>> I wrote a couple of simple java apps using Messenger to demonstrate
>>request/reply operation. Each app instantiates a single instance of
>>Messenger to send and receive messages from the queues.
>>
>> Run Reply app:
>>     1) subscribe to request queue and call recv() to wait for the
>>request message
>>     2) on receipt of request message send reply message to destination
>>specified by reply-to field of the request
>>
>> Run Request app:
>>     1) subscribe to the reply queue
>>     2) send a message to the request queue
>>     3) call Messenger.recv() to wait for the reply
>>
>> Pretty simple. And it works pretty reliably if I use a QPID broker to
>>intermediate between request and reply. If I use ActiveMQ (I¹ve tried
>>5.10 and 5.11-SNAPSHOT) I typically see the following:
>>
>> - the reply app connects to activemq and is waiting for the request
>>message
>> - the request app sends the message, no exception thrown but see this
>>message in the log:
>>    FINE: IN: CH[0] : Close{error=Error{condition=amqp:invalid-field,
>>description='Broker: localhost - Client: request already connected from
>>tcp://127.0.0.1:50485', info=null}}
>
>This sounds like it might be
>https://issues.apache.org/jira/browse/AMQ-4590: ActiveMQ only allows one
>connection with a given container identifier at present.
>
>ActiveMQ uses the container identifier as the JMS client id for e.g.
>durable subscriptions, and accordingly allows only one active connection
>with a given client id at any time.
>
>So if the request app is trying to establish two separate connections
>(one for the subscription and one for the send) that would cause the
>issue. There maybe some way to force it to use just one connection, but
>I am not familiar enough with that client to say for sure.
>
>> - no request message is seen by the broker and the request app is not
>>connected
>> - the request app calls Messenger.recv() which returns right away.
>>Messenger.incoming() returns 0.
>>
>> If I kill the reply app and and run the request app, I do see the
>>request message in activemq queue.
>>
>> I have used proton-j versions 0.7, 0.8 and 1.0-SNAPSHOT and all seem to
>>exhibit the same behavior.
>>
>> Any hints on what I¹m doing wrong would be appreciated.
>

Reply via email to