[rabbitmq-discuss] java client library rpc client

Reddy, Rajesh (GPT EMEA) rajesh.reddy at baml.com
Fri Apr 23 09:21:01 BST 2010

Hi Matthias,

The .net client has a overload call() defined which invokes cast()(Sends
an asynchronous/one-way message) and then Retrieves the reply from the
Subscription object which is consuming from the reply queue of the
So in this way you get the first reply back immediately and then you can
poll the subscription for any more replies.

I have extended the java rpcclient to work in a similar way by using
QueingConsumer instead of Default consumer.


-----Original Message-----
From: Matthias Radestock [mailto:matthias at rabbitmq.com] 
Sent: 23 April 2010 09:09
To: Reddy, Rajesh (GPT EMEA)
Cc: rabbitmq-discuss at lists.rabbitmq.com
Subject: Re: [rabbitmq-discuss] java client library rpc client


Reddy, Rajesh (GPT EMEA) wrote:
> Basically my process makes an rpccall and gets reply from one or more
> other process. This works if the rpcclient receives one reply for its
> request, but as soon as it gets multiple replies it fails. I get the
> following exception which doesn't say much about the root cause.

The rpc abstractions that ship with the RabbitMQ clients are not 
designed to handle multiple replies.

> This is possible in .NET library of rabbitmq and working fine.

The difference between the Java and .net version is that the former 
processes replies eagerly, i.e. any message received from the rpc 
client's reply queue is processed immediately, whereas the .net version 
processes replies lazily, i.e. only when an rpc caller is waiting for a 
result. If you tried re-using the same .net SimpleRpcClient instance for

another call things would break in much the same way as for the Java 
client since the code would find a reply that is not correlated to the 
current request.

To implement the "wait for first reply and discard all others" pattern 
properly I suggest you amend the rpc client code with an "unexpected 
reply" handler/callback that by default throws an exception (thus 
mimicking the current behaviour). In your application code you could 
then set that handler to ignore unexpected replies instead.

Patches are welcome.



This message w/attachments (message) may be privileged, confidential or proprietary, and if you are not an intended recipient, please notify the sender, do not use or share it and delete it. The information contained in this e-mail was obtained from sources believed to be reliable; however, the accuracy or completeness of this information is not guaranteed. Unless specifically indicated, this message is not an offer to sell or a solicitation of any investment products or other financial product or service, an official confirmation of any transaction, or an official statement of Merrill Lynch. Subject to applicable law, Merrill Lynch may monitor, review and retain e-communications (EC) traveling through its networks/systems. The laws of the country of each sender/recipient may impact the handling of EC, and EC may be archived, supervised and produced in countries other than the country in which you are located. This message cannot be guaranteed to be secure or error-free. References to "Merrill Lynch" are references to any company in the Merrill Lynch & Co., Inc. group of companies, which are wholly-owned by Bank of America Corporation. Securities and Insurance Products: * Are Not FDIC Insured * Are Not Bank Guaranteed * May Lose Value * Are Not a Bank Deposit * Are Not a Condition to Any Banking Service or Activity * Are Not Insured by Any Federal Government Agency. Past performance is no guarantee of future results. Attachments that are part of this E-communication may have additional important disclosures and disclaimers, which you should read. This message is subject to terms available at the following link: http://www.ml.com/e-communications_terms/. By messaging with Merrill Lynch you consent to the foregoing.

More information about the rabbitmq-discuss mailing list