spring boot-整合RabbitMq(RabbitMq基礎)

西京刀客發表於2020-11-23

一、RabbitMq基礎

RabbitMQ是一個由erlang開發的AMQP(Advanved Message Queue Protocol)的開源實現。

  • Exchange
    交換器,用來接收生產者傳送的訊息並將這些訊息路由給伺服器中的佇列。
    Exchange有4種型別: direct(預設), fanout, topic, 和headers,不同型別的Exchange轉發訊息的策略有所區別。

  • Queue
    訊息佇列,用來儲存訊息直到傳送給消費者。它是訊息的容器,也是訊息的終點。一個訊息可投入一個或多個佇列。訊息一直在佇列裡面,等待消費者連線到這個佇列將取走。

  • Binding
    繫結,用於訊息佇列和交換器之間的關聯。一個繫結就是基於路由鍵將交換器和訊息佇列連線起來的路由規則,所以可以將交換器理解成一個由繫結構成的路由表。

    Exchange 和Queue的繫結可以是多對多的關係。

總結: 建立 Exchange 利用路由鍵,將Exchange 和Queue的繫結,消費端 自己從自己指定的佇列拿取資料(消費端需指定佇列獲取訊息)。訊息傳送端一般需要指定exchange和routingKey。

生產者傳送訊息到交換機並指定一個路由key,消費者佇列繫結到交換機時要制定路由key(key匹配就能接受訊息,key不匹配就不能接受訊息)

二、Springboot 整合RabbitMq

1. spring boot 安裝配置rabbitMq

Spring Boot 2.X - Spring Boot整合AMQP之RabbitMQ
參考URL: https://www.pianshen.com/article/4074353758/

1.1 匯入maven依賴

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

1.2 新增配置檔案資訊

在application.properties檔案當中引入RabbitMQ基本的配置資訊

#對於rabbitMQ的支援
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

1.3 編寫RabbitConfig

啟用Rabbit註解

@SpringBootApplication
@EnableRabbit // 開啟基於註解的RabbitMQ模式
public class SpringBootAmqpApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootAmqpApplication.class, args);
    }
}

1.4 新建一個AmqpController,用於傳送訊息

@RestController
public class AmqpController {

    private final RabbitTemplate rabbitTemplate;

    public AmqpController(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
    }

    private final static String SUCCESS = "success";

    /**
     * 單點
     * @param msg
     * @return
     */
    @GetMapping("/direct")
    public String direct(String msg){
        rabbitTemplate.convertAndSend("amq.direct", "xudc", msg);
        return SUCCESS;
    }

    @GetMapping("/fanout")
    public String fanout(String msg) {
        rabbitTemplate.convertAndSend("amq.fanout", "", msg);
        return SUCCESS;
    }

    @GetMapping("/topic")
    public String topic(String msg){
        rabbitTemplate.convertAndSend("amq.topic", "xudc.#", msg);
        return SUCCESS;
    }
}

1.5 編寫訊息監聽者

@Component
public class AmqpListener {

    @RabbitListener(queues = "xudc")
    public void receive1(String message) {
        System.err.println("xudc -- receive1接收到訊息:" + message);
    }

    @RabbitListener(queues = "xudc.book")
    public void receive2(String message) {
        System.err.println("xudc.book -- receive2接收到訊息:" + message);
    }

    @RabbitListener(queues = "andy")
    public void receive3(String message) {
        System.err.println("andy -- receive3接收到訊息:" + message);
    }
}

三、參考

SpringBoot整合rabbitmq(一)
參考URL: https://www.cnblogs.com/sword-successful/p/10295561.html
Spring Boot 整合 AMQP
參考URL: https://blog.csdn.net/kangguang/article/details/104553352
Spring Boot 2.X - Spring Boot整合AMQP之RabbitMQ
參考URL: https://www.pianshen.com/article/4074353758/

相關文章