《JavaEE開發的顛覆者: Spring Boot實戰》系列讀書筆記
SpringBoot 整合RabbitMQ
什麼是RabbitMQ?
- RabbitMQ 是實現 AMQP(高級消息隊列協議)的消息中間件的一種,服務器端用Erlang語言編寫,支持多種客戶端,RabbitMQ 主要是爲了實現系統之間的雙向解耦而實現的。當生產者大量產生數據時,消費者無法快速消費,那麼需要一箇中間層,保存這個數據。
RabbitMQ的優點
-
消息總線(Message Queue),是一種跨進程的通信機制,用於上下游傳遞消息。
消息中間件最主要的作用是解耦,中間件最標準的用法是生產者生產消息傳送到隊列,消費者從隊列中拿取消息並處理,生產者不用關心是誰來消費,消費者不用關心誰在生產消息,從而達到解耦的目的。
RabbitMQ 在生產者與隊列之間, 加入了交換機 (Exchange). 這樣發消息者和隊列就沒有直接聯繫,
轉而變成發消息者把消息給交換器, 交換器根據調度策略再把消息再給隊列。交換機的功能主要是接收消息並且轉發到綁定的隊列,交換機不存儲消息。
交換機有四種類型:Direct, topic, Headers and Fanout
- Direct:direct 類型的行爲是”先匹配, 再投送”. 即在綁定時設定一個 routing_key,消息的routing_key 匹配時, 纔會被交換器投送到綁定的隊列中去.
- Topic:按規則轉發消息(最靈活)
- Headers:設置 header attribute 參數類型的交換機
- 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();
}