diff --git a/rabbitmq/pom.xml b/rabbitmq/pom.xml
index ed45029d3c..ae38d697f6 100644
--- a/rabbitmq/pom.xml
+++ b/rabbitmq/pom.xml
@@ -9,20 +9,42 @@
com.baeldung
- parent-modules
- 1.0.0-SNAPSHOT
+ parent-boot-2
+ 0.0.1-SNAPSHOT
+ ../parent-boot-2
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud-dependencies.version}
+ pom
+ import
+
+
+
+
com.rabbitmq
amqp-client
${amqp-client.version}
+
+ org.springframework.boot
+ spring-boot
+
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+
5.12.0
+ 2020.0.3
\ No newline at end of file
diff --git a/rabbitmq/src/main/java/com/baeldung/pubsubmq/client/ClientApplication.java b/rabbitmq/src/main/java/com/baeldung/pubsubmq/client/ClientApplication.java
new file mode 100644
index 0000000000..e8acb90f00
--- /dev/null
+++ b/rabbitmq/src/main/java/com/baeldung/pubsubmq/client/ClientApplication.java
@@ -0,0 +1,43 @@
+package com.baeldung.pubsubmq.client;
+
+import org.springframework.amqp.core.Queue;
+import org.springframework.amqp.rabbit.connection.ConnectionFactory;
+import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
+import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+
+
+@SpringBootApplication
+public class ClientApplication {
+ private static final String MESSAGE_QUEUE = "pizza-message-queue";
+
+ @Bean
+ public Queue queue() {
+ return new Queue(MESSAGE_QUEUE);
+ }
+
+ @Bean
+ public SimpleMessageListenerContainer container(ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
+ SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
+ container.setConnectionFactory(connectionFactory);
+ container.setQueueNames(MESSAGE_QUEUE);
+ container.setMessageListener(listenerAdapter);
+ return container;
+ }
+
+ @Bean
+ public Consumer consumer() {
+ return new Consumer();
+ }
+
+ @Bean
+ public MessageListenerAdapter listenerAdapter(Consumer consumer) {
+ return new MessageListenerAdapter(consumer, "receiveOrder");
+ }
+
+ public static void main(String[] args) {
+ SpringApplication.run(ClientApplication.class, args);
+ }
+}
diff --git a/rabbitmq/src/main/java/com/baeldung/pubsubmq/client/Consumer.java b/rabbitmq/src/main/java/com/baeldung/pubsubmq/client/Consumer.java
new file mode 100644
index 0000000000..fadc60572d
--- /dev/null
+++ b/rabbitmq/src/main/java/com/baeldung/pubsubmq/client/Consumer.java
@@ -0,0 +1,7 @@
+package com.baeldung.pubsubmq.client;
+
+public class Consumer {
+ public void receiveOrder(String message) {
+ System.out.printf("Order received: %s%n", message);
+ }
+}
diff --git a/rabbitmq/src/main/java/com/baeldung/pubsubmq/server/Publisher.java b/rabbitmq/src/main/java/com/baeldung/pubsubmq/server/Publisher.java
new file mode 100644
index 0000000000..24c4be0a70
--- /dev/null
+++ b/rabbitmq/src/main/java/com/baeldung/pubsubmq/server/Publisher.java
@@ -0,0 +1,28 @@
+package com.baeldung.pubsubmq.server;
+
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+
+import javax.annotation.PostConstruct;
+
+public class Publisher {
+
+ private RabbitTemplate rabbitTemplate;
+ private String queue;
+ private String topic;
+
+ public Publisher(RabbitTemplate rabbitTemplate, String queue, String topic) {
+ this.rabbitTemplate = rabbitTemplate;
+ this.queue = queue;
+ this.topic = topic;
+ }
+
+ @PostConstruct
+ public void postMessages() {
+ rabbitTemplate.convertAndSend(queue, "1 Pepperoni");
+ rabbitTemplate.convertAndSend(queue, "3 Margarita");
+ rabbitTemplate.convertAndSend(queue, "1 Ham and Pineapple (yuck)");
+
+ rabbitTemplate.convertAndSend(topic, "notification", "New Deal on T-Shirts: 95% off!");
+ rabbitTemplate.convertAndSend(topic, "notification", "2 for 1 on all Jeans!");
+ }
+}
diff --git a/rabbitmq/src/main/java/com/baeldung/pubsubmq/server/ServerApplication.java b/rabbitmq/src/main/java/com/baeldung/pubsubmq/server/ServerApplication.java
new file mode 100644
index 0000000000..f2387f6ae5
--- /dev/null
+++ b/rabbitmq/src/main/java/com/baeldung/pubsubmq/server/ServerApplication.java
@@ -0,0 +1,57 @@
+package com.baeldung.pubsubmq.server;
+
+import org.springframework.amqp.core.Binding;
+import org.springframework.amqp.core.BindingBuilder;
+import org.springframework.amqp.core.Queue;
+import org.springframework.amqp.core.TopicExchange;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+
+@SpringBootApplication
+public class ServerApplication {
+ private static final String MESSAGE_QUEUE = "pizza-message-queue";
+ private static final String PUB_SUB_TOPIC = "notification-topic";
+ private static final String PUB_SUB_EMAIL_QUEUE = "email-queue";
+ private static final String PUB_SUB_TEXT_QUEUE = "text-queue";
+
+ @Bean
+ public Queue queue() {
+ return new Queue(MESSAGE_QUEUE);
+ }
+
+ @Bean
+ public Queue emailQueue() {
+ return new Queue(PUB_SUB_EMAIL_QUEUE);
+ }
+
+ @Bean
+ public Queue textQueue() {
+ return new Queue(PUB_SUB_TEXT_QUEUE);
+ }
+
+ @Bean
+ public TopicExchange exchange() {
+ return new TopicExchange(PUB_SUB_TOPIC);
+ }
+
+ @Bean
+ public Binding emailBinding(Queue emailQueue, TopicExchange exchange) {
+ return BindingBuilder.bind(emailQueue).to(exchange).with("notification");
+ }
+
+ @Bean
+ public Binding textBinding(Queue textQueue, TopicExchange exchange) {
+ return BindingBuilder.bind(textQueue).to(exchange).with("notification");
+ }
+
+ @Bean
+ public Publisher publisher(RabbitTemplate rabbitTemplate) {
+ return new Publisher(rabbitTemplate, MESSAGE_QUEUE, PUB_SUB_TOPIC);
+ }
+
+ public static void main(String[] args) {
+ SpringApplication.run(ServerApplication.class, args);
+ }
+}