1. 程式人生 > 其它 >筆記 ── Springboot 整合 RabbitMQ 直連模型

筆記 ── Springboot 整合 RabbitMQ 直連模型

技術標籤:佇列rabbitmqspringboot

直連模型(點對點、一對一)

在這裡插入圖片描述

  • P:生產者,也就是要傳送訊息的程式
  • C:消費者:訊息的接受者,會一直等待訊息到來。
  • queue:訊息佇列,圖中紅色部分。類似一個郵箱,可以快取訊息;生產者向其中投遞訊息,消費者從其中取出訊息。

maven依賴

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

application.properties

spring.rabbitmq.host=192.168.56.101
spring.rabbitmq.port=5673
spring.rabbitmq.username=test
spring.rabbitmq.password=123456
spring.rabbitmq.virtual-host=/ems

RabbitConfig

@Configuration
public class RabbitConfig {
    //佇列TestDirectQueue
    @Bean
    public Queue TestDirectQueue
() { // durable:是否持久化,預設是false,持久化佇列:會被儲存在磁碟上,當訊息代理重啟時仍然存在,暫存佇列:當前連線有效 // exclusive:預設也是false,是否獨佔佇列 // autoDelete:是否自動刪除,當沒有生產者或者消費者使用此佇列,該佇列會自動刪除。 return new Queue("TestDirectQueue",true,false,false); } }

生產者

@RestController
public class SendMessageController
{ @Autowired RabbitTemplate rabbitTemplate; //使用RabbitTemplate,這提供了接收/傳送等等方法 @GetMapping("/sendDirectMessage") public String sendDirectMessage() { //第一個引數是交換機名稱,由於沒有"",第二個是routingKey //生產端沒有指定交換機只有routingKey和Object,也就是說這個消費方產生hello佇列,放在預設的交換機(AMQP default)上。 //而預設的交換機有一個特點,只要你的routerKey與這個交換機中有同名的佇列,他就會自動路由上。 //生產端routingKey 叫TestQueue,消費端生產TestQueue佇列。他們就路由上了 Map<String, Object> map = new HashMap<>(); map.put("messageId", "test"); rabbitTemplate.convertAndSend("", "TestDirectQueue", map); return "ok"; } }

消費者

@Component
@RabbitListener(queues = "TestDirectQueue")//監聽的佇列名稱 TestDirectQueue
public class DirectReceiver {

    @RabbitHandler
    public void process(Map testMessage) {
        System.out.println("DirectReceiver消費者收到訊息  : " + testMessage.toString());
    }

}

在這裡插入圖片描述
在這裡插入圖片描述