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); + } +}