RabbitMQ Java Client Example (Producer & Consumer)
- 4.5/5
- 5995
- Jul 20, 2024
RabbitMQ is a message broker: it accepts and forwards messages.
It consists of a large message buffer (queue), a queue is only bound by the host's memory & disk limits.
Many producers (program that sends messages) can send messages that go to one queue, and many consumers (a program that waits to receive messages) can try to receive data from one queue.
Installing RabbitMQ
In order to complete this article, we need a running instance of "RabbitMQ".
There are many ways of downloading and installing RabbitMQ.
For the sake of simplicity, let's start a RabbitMQ instance with the help of a Docker image.
If you have Docker installed on your machine, you can run a RabbitMQ instance with the following command:
% docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.11.9
There are a number of clients for RabbitMQ in many different languages.
In this article, we'll use the Java client provided by RabbitMQ.
RabbitMQ with Java
There are two kinds of applications interacting with a messaging system: producers and consumers.
In this article, we will discuss a simple example with two services (producers and consumers) which will communicate using RabbitMQ.
One of the service (producer) will publish messages to RabbitMQ and the other one (consumer) will consume.
1) Producer
1.1) Dependencies
The final "pom.xml" should look something like this:
1.2) Implementation
In the code below, first we establish a connection to RabbitMQ using "ConnectionFactory".
Secondly, we declare a queue named "order_queue".
Next, we produce 10 random messages and publish them to the queue.
Finally, we terminate the connection to RabbitMQ.
1.3) Testing
Now that we've completed our Producer configuration, run the application and you should see the following output in the console:
Produced: {"oderId":1744, "items":[{"id":1730},{"id":6}]} Produced: {"oderId":1217, "items":[{"id":1931},{"id":8}]} Produced: {"oderId":1044, "items":[{"id":1807},{"id":6}]} Produced: {"oderId":1183, "items":[{"id":1958},{"id":1}]} Produced: {"oderId":1442, "items":[{"id":1254},{"id":7}]} Produced: {"oderId":1431, "items":[{"id":1963},{"id":3}]} Produced: {"oderId":1931, "items":[{"id":1334},{"id":5}]} Produced: {"oderId":1095, "items":[{"id":1191},{"id":9}]} Produced: {"oderId":1464, "items":[{"id":1537},{"id":5}]} Produced: {"oderId":1792, "items":[{"id":1324},{"id":9}]}
2) Consumer
2.1) Dependencies
The final "pom.xml" should look something like this:
2.2) Implementation
In the code below, first we establish a connection to RabbitMQ using "ConnectionFactory".
Secondly, we create a "DefaultConsumer" with an anonymous override implementation of "handleDelivery()".
Finally, we tell this consumer to listen to "order_queue" and consume from it.
2.3) Testing
Now that we've completed our Consumer configuration, run the application and you should see the following output in the console:
Consumed: {"oderId":1744, "items":[{"id":1730},{"id":6}]} Consumed: {"oderId":1217, "items":[{"id":1931},{"id":8}]} Consumed: {"oderId":1044, "items":[{"id":1807},{"id":6}]} Consumed: {"oderId":1183, "items":[{"id":1958},{"id":1}]} Consumed: {"oderId":1442, "items":[{"id":1254},{"id":7}]} Consumed: {"oderId":1431, "items":[{"id":1963},{"id":3}]} Consumed: {"oderId":1931, "items":[{"id":1334},{"id":5}]} Consumed: {"oderId":1095, "items":[{"id":1191},{"id":9}]} Consumed: {"oderId":1464, "items":[{"id":1537},{"id":5}]} Consumed: {"oderId":1792, "items":[{"id":1324},{"id":9}]}