In this
post, I am going to explain, simple producer-consumer scenario.
Producer.java : Produce messages and send them to RabbitMQ.
Receiver.java : Receive message from RabbitMQ and print to
console.
Step 1: Download java client libraries for RabbitMQ.
You can
download java client libraries from following location.
Following is
the maven dependencies I used.
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.5.4</version>
</dependency>
Step 2: Create Producer.java, which produce simple Hello
World! Message and send to queue ‘hello’.
import java.io.IOException; import java.util.concurrent.TimeoutException; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; public class Producer { private final static String QUEUE_NAME = "hello"; private static final String HOST_NAME = "127.0.0.1"; /* get connection instance to connect to RabbitMQ broker */ private static Connection getConnection() throws IOException, TimeoutException { /* Get factory instance to open connection to RabbitMQ broker */ ConnectionFactory factory = new ConnectionFactory(); factory.setHost(HOST_NAME); /* Create new broker connection */ Connection connection = factory.newConnection(); return connection; } public static void main(String[] argv) throws Exception { Connection connection = getConnection(); Channel channel = connection.createChannel(); /* Create queue if not exist */ channel.queueDeclare(QUEUE_NAME, false, false, false, null); String message = "Hello World!"; /* Public message to queue */ channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8")); System.out.println("Sent '" + message + "'"); /* Close channel and connection */ channel.close(); connection.close(); } }
Comments in
the program are self explanatory.
Step 3: Create Consumer.java, which receives message from
queue ‘hello’ and consume it.
import java.io.IOException; import java.util.concurrent.TimeoutException; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.Consumer; import com.rabbitmq.client.DefaultConsumer; import com.rabbitmq.client.Envelope; public class Receiver { private final static String QUEUE_NAME = "hello"; private static final String HOST_NAME = "127.0.0.1"; /* get connection instance to connect to RabbitMQ broker */ private static Connection getConnection() throws IOException, TimeoutException { /* Get factory instance to open connection to RabbitMQ broker */ ConnectionFactory factory = new ConnectionFactory(); factory.setHost(HOST_NAME); /* Create new broker connection */ Connection connection = factory.newConnection(); return connection; } public static void main(String[] argv) throws Exception { Connection connection = getConnection(); Channel channel = connection.createChannel(); /* Create queue if not exist */ channel.queueDeclare(QUEUE_NAME, false, false, false, null); System.out.println("Waiting for messages"); Consumer consumer = new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String message = new String(body, "UTF-8"); System.out.println(" [x] Received '" + message + "'"); } }; channel.basicConsume(QUEUE_NAME, true, consumer); } }
Comments in
the program are self explanatory.
Step 4: Compile Producer and Receiver.
$ javac -cp
rabbitmq-client.jar Receiver.java Producer.java
Step 5: Run producer using following command.
$ java -cp
.:commons-io-1.2.jar:commons-cli-1.1.jar:rabbitmq-client.jar Producer
Sent 'Hello
World!'
Step 6: Use following command to list all queues
$
rabbitmqctl list_queues
Listing
queues ...
hello 1
Step 7: Run Receiver using following command.
$ java -cp
.:commons-io-1.2.jar:commons-cli-1.1.jar:rabbitmq-client.jar Receiver
Waiting for
messages
[x] Received 'Hello World!'
Queue deletes messages, once message delivered to consumer. You can check using rabbitmqctl
command.
$
rabbitmqctl list_queues
Listing
queues ...
hello 0
That’s it….
You are done with first RabbitMQ application.
No comments:
Post a Comment