整合Spring Cloud Stream Binder與RabbitMQ進行消息發送與接收
我最新最全的文章都在 南瓜慢說 www.pkslow.com ,歡迎大家來喝茶!
1 前言
Spring Cloud Stream
專門用於事件驅動的微服務系統,使用消息中間件來收發信息。使用Spring Cloud Stream
可專註於業務開發,而不用花太多心思在應用與MQ之間的交互上。而且,在切換MQ後,也無須做太多的代碼改動。
本文將整合Spring Cloud Stream
和RabbitMQ
,以實現消息收發。
2 整合過程
2.1 添加依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
不同的MQ使用不同的依賴,非常容易切換。
2.2 定義處理收發的方法
隊列無非就是收和發,所以我們要先定義好,怎麼樣發,怎麼樣收。
發送消息:
@Bean
public Supplier<String> pkslowSource() {
return () -> {
String message = "www.pkslow.com";
log.info("Sending value: " + message);
return message;
};
}
只發送一個String
,一般業務通常為Entity類。這裡發送的內容也固定不變,實際業務可以通過查數據庫,讀文件等方式獲取數據源。
接收消息:
@Bean
public Consumer<String> pkslowSink() {
return message -> {
log.info("Received message " + message);
};
}
直接打印消息即可,項目中的邏輯可按具體業務實現。
2.3 配置屬性
配置RabbitMQ:
spring:
rabbitmq:
host: localhost
port: 5672
username: pkslow
password: 123456
配置Spring Cloud Stream
的相關項:
spring:
cloud:
stream:
function:
definition: pkslowSource;pkslowSink
bindings:
pkslowSource-out-0:
destination: pkslow-topic
pkslowSink-in-0:
destination: pkslow-topic
poller:
fixed-delay: 500
spring.cloud.stream.function.definition
會定義處理方法,如本文的收發消息的方法;
bindings
配置對應的function
;destination指向MQ的主題;
這裡配了一個poller
,每隔500ms就會發送一次消息。
2.4 運行
先啟動個RabbitMQ:
docker run \
-e RABBITMQ_DEFAULT_USER=pkslow \
-e RABBITMQ_DEFAULT_PASS=123456 \
-p 5672:5672 -p 15672:15672 \
rabbitmq:3.8-management
運行程序後,會自己創建主題、發送信息、接收信息:
運行日誌如下:
可以看到每一次發/收大概是間隔了500ms,當然不可能是精確的500ms。
3 總結
代碼請查看://github.com/LarryDpk/pkslow-samples
歡迎關注微信公眾號<南瓜慢說>,將持續為你更新…
多讀書,多分享;多寫作,多整理。