■POM.xmlの中で、下記の内容を追加
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency>
■application.ymlの中で、下記の内容を追加
spring: # RabbitMQ配置 rabbitmq: host: localhost port: 5672 username: guest password: guest thymeleaf: prefix: classpath:/templates/ suffix: .html cache: false
■Send画面とReceive画面を/static/pulicに追加
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Self Send Message Page</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <h1>Self Send Message Page</h1> <form id="sendForm"> <label for="inputmessage">Send Message:</label> <input type="text" name="message" id="inputmessage"> <button type="button" id="direct_msg">Send Direct Message</button> <button type="button" id="fanout_msg">Send Fanout Message</button> <button type="button" id="topic_msg">Send Topic Message</button> </form> <script> $(document).ready(function () { $("#direct_msg").click(function () { var msg = $("#inputmessage").val(); $.post("/srr/self/sendDirectMsg",{message:msg},function (){ console.log("Direct Sent:",msg) }); }); $("#fanout_msg").click(function () { var msg = $("#inputmessage").val(); $.post("/srr/self/sendFanoutMsg",{message:msg},function (){ console.log("Fanout Sent:",msg) }); }); $("#topic_msg").click(function () { var msg = $("#inputmessage").val(); $.post("/srr/self/sendTopicMsg",{message:msg},function (){ console.log("Topic Sent:",msg) }); }); }); </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Self Receive Message Page</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script> $(document).ready(function () { $("#getDirectMessage").click(function (event) { $.get("/srr/self/getDirectMsg",function (obj) { if(obj.length != 0){ $("#message").append("<li>Direct-->" + obj + "</li>"); } }); }); $("#getFanoutMessage").click(function (event) { $.get("/srr/self/getFanoutMsg",function (obj) { if(obj.length != 0){ $("#message").append("<li>Fanout-->" + obj + "</li>"); } }); }); $("#getTopicMessage").click(function (event) { $.get("/srr/self/getTopicMsg",function (obj) { if(obj.length != 0){ $("#message").append("<li>Topic-->" + obj + "</li>"); } }); }); }); </script> </head> <body> <h1>Self Receive Message Page</h1> <ul id="message"></ul> <button id="getDirectMessage">Get Direct Message</button> <button id="getFanoutMessage">Get Fanout Message</button> <button id="getTopicMessage">Get Topic Message</button> </body> </html>
■コンポーネント(Sender、Receiver)を追加
package com.example.srrwk.component; import com.example.srrwk.config.SelfRabbitMQConfig; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class MessageSelfSender { @Autowired private RabbitTemplate rabbitTemplate; public void sendDirectMessage(String message){ System.out.println("Sending message: " + message); rabbitTemplate.convertAndSend(SelfRabbitMQConfig.LT_EXCHANGE_DIRECT_XX,SelfRabbitMQConfig.LT_ROUTING_KEY_DIRECT_XX,message); } public void sendFanoutMessage(String message){ System.out.println("Sending message: " + message); rabbitTemplate.convertAndSend(SelfRabbitMQConfig.LT_EXCHANGE_FANOUT_XX,"",message); } public void sendTopicMessage(String message){ System.out.println("Sending message: " + message); rabbitTemplate.convertAndSend(SelfRabbitMQConfig.LT_EXCHANGE_TOPIC_XX,SelfRabbitMQConfig.LT_ROUTING_KEY_TOPIC_XX,message); } }
package com.example.srrwk.component; import com.example.srrwk.config.SelfRabbitMQConfig; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class MessageSelfReceiver { @Autowired private RabbitTemplate rabbitTemplate; public String getDirectMessage(){ Object msgObj = rabbitTemplate.receiveAndConvert(SelfRabbitMQConfig.LT_QUEUE_DIRECT_XX); String msg = ""; if(msgObj != null){ msg = msgObj.toString(); } return msg; } public String getFanoutMessage(){ Object msgObj = rabbitTemplate.receiveAndConvert(SelfRabbitMQConfig.LT_QUEUE_FANOUT_XX); String msg = ""; if(msgObj != null){ msg = msgObj.toString(); } return msg; } public String getTopicMessage(){ Object msgObj = rabbitTemplate.receiveAndConvert(SelfRabbitMQConfig.LT_QUEUE_TOPIC_XX); String msg = ""; if(msgObj != null){ msg = msgObj.toString(); } return msg; } }
■コンフィグレーション(RabbitMQConfig)を追加
package com.example.srrwk.config; import org.springframework.amqp.core.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SelfRabbitMQConfig { public static final String LT_EXCHANGE_DIRECT_XX="lt.exchange.direct.xx"; public static final String LT_QUEUE_DIRECT_XX="lt.queue.direct.xx"; public static final String LT_ROUTING_KEY_DIRECT_XX="lt.routingkey.direct.xx"; public static final String LT_EXCHANGE_FANOUT_XX="lt.exchange.fanout.xx"; public static final String LT_QUEUE_FANOUT_XX="lt.queue.fanout.xx"; // public static final String LT_ROUTING_KEY_FANOUT_XX="lt.routingkey.fanout.xx"; public static final String LT_EXCHANGE_TOPIC_XX="lt.exchange.topic.xx"; public static final String LT_QUEUE_TOPIC_XX="lt.queue.topic.xx"; public static final String LT_ROUTING_KEY_TOPIC_XX="lt.routingkey.topic.*"; @Bean public DirectExchange directExchange(){ return new DirectExchange(LT_EXCHANGE_DIRECT_XX); } @Bean public Queue directQueue(){ return new Queue(LT_QUEUE_DIRECT_XX); } @Bean public Binding directBinding(Queue directQueue, DirectExchange directExchange){ return BindingBuilder.bind(directQueue).to(directExchange).with(LT_ROUTING_KEY_DIRECT_XX); } @Bean public FanoutExchange fanoutExchange(){ return new FanoutExchange(LT_EXCHANGE_FANOUT_XX); } @Bean public Queue fanoutQueue(){ return new Queue(LT_QUEUE_FANOUT_XX); } @Bean public Binding fanoutBinding(Queue fanoutQueue, FanoutExchange fanoutExchange){ return BindingBuilder.bind(fanoutQueue).to(fanoutExchange); } @Bean public TopicExchange topicExchange(){ return new TopicExchange(LT_EXCHANGE_TOPIC_XX); } @Bean public Queue topicQueue(){ return new Queue(LT_QUEUE_TOPIC_XX); } @Bean public Binding topicBinding(Queue topicQueue, TopicExchange topicExchange){ return BindingBuilder.bind(topicQueue).to(topicExchange).with(SelfRabbitMQConfig.LT_ROUTING_KEY_TOPIC_XX); } }
※:このファイルは、ExchangeとQueueを紐付けるため、作成する。代わりに、RabbitMQの内部で手で作成できる。
■コントロール(Controller)を追加
package com.example.srrwk.controller; import com.example.srrwk.component.MessageSelfReceiver; import com.example.srrwk.component.MessageSelfSender; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/self") public class SelfController { @Autowired MessageSelfSender sender; @Autowired MessageSelfReceiver receiver; @PostMapping("/sendDirectMsg") public void sendDirectMsg(@RequestParam("message") String message){ sender.sendDirectMessage(message); } @GetMapping("/getDirectMsg") public String getDirectMsg(){ return receiver.getDirectMessage(); } @PostMapping("/sendFanoutMsg") public void sendFanoutMsg(@RequestParam("message") String message){ sender.sendFanoutMessage(message); } @GetMapping("/getFanoutMsg") public String getFanoutMsg(){ return receiver.getFanoutMessage(); } @PostMapping("/sendTopicMsg") public void sendTopicMsg(@RequestParam("message") String message){ sender.sendTopicMessage(message); } @GetMapping("/getTopicMsg") public String getTopicMsg(){ return receiver.getTopicMessage(); } }
■検証画面
Send画面:<http://localhost:8088/srr/self_send.html>
Receive画面:<http://localhost:8088/srr/self_receive.html>
■RabbitMQのインストール参考
URL: <https://www.cnblogs.com/lnsylt/p/14341074.html>