Spring Boot實戰|整合RabbitMQ

《JavaEE開發的顛覆者: Spring Boot實戰》系列讀書筆記

SpringBoot 整合RabbitMQ


什麼是RabbitMQ?

  • RabbitMQ 是實現 AMQP(高級消息隊列協議)的消息中間件的一種,服務器端用Erlang語言編寫,支持多種客戶端,RabbitMQ 主要是爲了實現系統之間的雙向解耦而實現的。當生產者大量產生數據時,消費者無法快速消費,那麼需要一箇中間層,保存這個數據。

RabbitMQ的優點

  • 消息總線(Message Queue),是一種跨進程通信機制,用於上下游傳遞消息。

    消息中間件最主要的作用是解耦,中間件最標準的用法是生產者生產消息傳送到隊列,消費者從隊列中拿取消息並處理,生產者不用關心是誰來消費,消費者不用關心誰在生產消息,從而達到解耦的目的。

    RabbitMQ 在生產者與隊列之間, 加入了交換機 (Exchange). 這樣發消息者和隊列就沒有直接聯繫,
    轉而變成發消息者把消息給交換器, 交換器根據調度策略再把消息再給隊列。

    交換機的功能主要是接收消息並且轉發到綁定的隊列,交換機不存儲消息。

交換機有四種類型:Direct, topic, Headers and Fanout

  1. Direct:direct 類型的行爲是”先匹配, 再投送”. 即在綁定時設定一個 routing_key,消息的routing_key 匹配時, 纔會被交換器投送到綁定的隊列中去.
  2. Topic:按規則轉發消息(最靈活)
  3. Headers:設置 header attribute 參數類型的交換機
  4. Fanout:轉發消息到所有綁定隊列

環境配置(Wndows環境)
安裝Erlang
Erlang下載地址
安裝RabbbitMQ
RabbbitMQ下載地址
下載安裝完成之後,在命令行打開RabbitMQ文件sbin目錄,然後輸入命令:
rabbitmq-plugins enable rabbitmq_management,啓動管理工具。
訪問:http://127.0.0.1:15672/
使用默認賬號登錄:guest/ guest
在這裏插入圖片描述

簡單使用

添加依賴

  • 主要是添加 spring-boot-starter-amqp 的支持

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

配置文件

  • 在application.propertions中配置 RabbitMQ 的地址、端口、虛擬主機等信息

    spring.rabbitmq.host=127.0.0.1
    spring.rabbitmq.port=5672
    spring.rabbitmq.virtualhost=testhost
    spring.rabbitmq.username=admin
    spring.rabbitmq.password=XX
    

隊列配置

@Configuration
public class RabbitConfig {
    @Bean
    public Queue Queue() {
        return new Queue("joker");
    }    
}

生產者

  • rabbitTemplate 是 Spring Boot 提供的默認實現,根據key全文匹配去尋找隊列。

    @Component
    public class HelloSender {
    
    	@Autowired
    	private AmqpTemplate rabbitTemplate;
    
    	public void send() {
    		String context = "hello rabbit";
    		System.out.println("發送消息 : " + context);
    		this.rabbitTemplate.convertAndSend("joker", context);
    	}
    
    }
    

消費者

@Component
@RabbitListener(queues = "joker")
public class HelloReceiver {

    @RabbitHandler
    public void receive(String hello) {
        System.out.println("接收消息  : " + hello);
    }

}

測試

@Test
	public void hello() throws Exception {
		helloSender.send();
	}

在這裏插入圖片描述


參考
RabbitMQ教程
RabbitMQ 詳解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章