This section describes how WSO2 ESB can be used to send messages to a RabbitMQ queue.
Following is a sample scenario that demonstrates how the ESB is configured to listen to HTTP requests and publish them to a RabbitMQ server (message exchange).
Note
To create proxy services, sequences, endpoints, message stores and message processors in the ESB, you can either use the ESB Management Console or copy the XML configuration to the source view. To access the source view on the ESB Management Console, go to Manage -> Service Bus -> Source View.
Prerequisites
- Configure the RabbitMQ AMQP transport. For information on how to configure the transport, see Configuring the RabbitMQ AMQP transport.
- Start the ESB server.
Configure the sample
Create a custom proxy service with the following configuration. For more information on creating proxy services, see Working with Proxy Services.
<?xml version="1.0" encoding="UTF8"?> <proxy xmlns="http://ws.apache.org/ns/synapse"name="AMQPProducerSample"transports="http"statistics="disable"trace="disable"startOnLoad="true"> <target> <inSequence> <property name="OUT_ONLY" value="true"/> <property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/> <send> <endpoint> <address uri="rabbitmq:/AMQPProducerSample?rabbitmq.server.host.name=localhost&rabbitmq.server.port=5672&rabbitmq.queue.name=queue&rabbitmq.queue.route.key=route&rabbitmq.exchange.name=exchange"/> </endpoint> </send> </inSequence> <outSequence> <send/> </outSequence> </target> <description/> </proxy>
Use the following as a RabbitMQ consumer that will consume and display the incoming messages to the RabbitMQ queue.
ConnectionFactoryfactory =newConnectionFactory(); factory.setHost(“localhost”); factory.setUsername(“guest”); factory.setPassword(“guest”); factory.setPort(5672); Connectionconnection =factory.newConnection(); Channelchannel =connection.createChannel(); channel.queueDeclare(“queue”,false,false,false,null); channel.exchangeDeclare(“exchange”,"direct",true); channel.queueBind(“queue”,“exchange”,“route”); //Createtheconsumer QueueingConsumerconsumer =newQueueingConsumer(channel); channel.basicConsume(“queue”,true,consumer); //Startconsumingmessages while(true) { QueueingConsumer.Deliverydelivery =consumer.nextDelivery(); Stringmessage =newString(delivery.getBody()); }
Execute the sample client
Execute the following command from <ESB_HOME>/sample/axis2Client
, to send an HTTP message to ESB proxy service.
ant stockquote -Daddurl=http://localhost:8280/services/AMQPProducerSample -Dmode=placeorder
Analyzing the output
You will see that the http request is sent to the given ESB Proxy service and that it is forwarded to the RabbitMQ server via the RabbitMQ AMQP transport sender.
You can view the messages received at the RabbitMQ queue in the RabbitMQ SimpleProducer console.