[rabbitmq-discuss] Creating exchanges on demand.

Matthias Radestock matthias at lshift.net
Mon Jun 8 20:44:44 BST 2009


Camilo,

Camilo Lopez wrote:
> Appart from the rpc facilities  in the clients is there a good pattern
> to follow here?

The rpc wrappers actually implement a very straightforward pattern. Take 
a look at the code for Rpc{Client,Server}.java.

The pattern is this:

The server creates a queue for requests and binds that queue to an 
exchange. In the simplest case, the queue is named after the rpc service 
and the standard binding to AMQP's default exchange suffices - that's 
what I am assuming below. The server subscribes a consumer to that queue.

Each client creates a (usually anonymous and exclusive) queue for 
replies and subscribes a consumer (usually with noAck=true) to that queue.

RPCs then happen as follows:

1. The client publishes the request as a message to the default exchange 
with a routing key identifying the rpc service, the request as the 
payload, and two message properties (see 
http://www.rabbitmq.com/releases/rabbitmq-java-client/v1.5.5/rabbitmq-java-client-javadoc-1.5.5/com/rabbitmq/client/AMQP.BasicProperties.html) 
a correlationId that identifies the requests (this is only necessary if 
the client wants to pipeline requests), and a replyTo property set to 
its reply queue name.

2. The server's consumer receives the request, performs the necessary 
invocations, and then publishes the reply to the default exchange with 
the routing key set to the value of the replyTo property of the request, 
and the correlationId message property set to the correlationId property 
of the request. The client then basic.ack's the request.

3. The client's consumer receives the reply, and correlates it with the 
request using the correlationId.


Regards,

Matthias.




More information about the rabbitmq-discuss mailing list