SpringCloud?Stream?整合RabbitMQ的基本步驟
本篇簡單介紹SpringCloud Stream 整合RabbitMQ基本步驟:
- 引入SpringCloud
- 引入SpringCloud Stream相關(guān)依賴
- 定義綁定接口: 消息生產(chǎn)者(Output…Binding) 、消息消費者(Input…Binding)
- @EnableBinding 在對應(yīng)類上進(jìn)行定義
- @StreamListener 在對應(yīng)方法上創(chuàng)建監(jiān)聽用來消費消息
- 調(diào)用output的send()方法生產(chǎn)消息
一、項目介紹
演示SpringCloud Stream 整合RabbitMQ,項目可以在一個工程里完成,本次建立了一個工程mq-service,其中包含三個Module:
- mq-service-base :基礎(chǔ)模塊(包含了共用依賴、共用變量)
- mq-service-producer :生產(chǎn)者
- mq-service-consumer :消費者
注: 完全可以在一個工程里實現(xiàn),這里為了區(qū)分,并為了后續(xù)單獨啟動或停止生產(chǎn)者或消費者做實驗,也為了適應(yīng)實際應(yīng)用項目,所以創(chuàng)建了不同Module
(1)版本
- SpringBoot : 2.0.6.RELEASE
- SpringCloud : Finchley.SR2
- RabbitMQ : 3.8.1
(2)項目整體結(jié)構(gòu)
(3)基礎(chǔ)模塊
1)pom.xml
這里作為公共模塊引入SpringCloud、Spring Cloud Stream等,其中也再此引入fastjson、lombok等工具依賴
(完整代碼見文章最下面)
其中Spring Cloud Stream如下:
<!-- Spring Cloud Stream, 用于MQ消息發(fā)送--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </dependency>
2) model
定義共用的變量,如CollectionRequest.java
二、生產(chǎn)者
(1)結(jié)構(gòu)
(2)pom.xml
導(dǎo)入base的依賴即可,因為相關(guān)共用依賴在base中已經(jīng)引入
<dependency> <groupId>com.zrk</groupId> <artifactId>mq-service-base</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
(3)定義綁定(接口)
OutputMessageBinding.java
public interface OutputMessageBinding { /** Topic 名稱*/ String OUTPUT = "message-center-out"; @Output(OUTPUT) MessageChannel output(); }
(4)添加配置
# rabbitmq連接信息 spring.rabbitmq.addresses=192.168.1.125 spring.rabbitmq.port=5672 spring.rabbitmq.username=admin spring.rabbitmq.password=123456 spring.cloud.stream.bindings.message-center-out.destination=message-center spring.cloud.stream.rabbit.bindings.message-center-out.consumer.exchangeType=fanout
(5) 調(diào)用方法
CollectionServiceImpl.java
@Service @EnableBinding(OutputMessageBinding.class) public class CollectionServiceImpl implements CollectionService{ @Resource private OutputMessageBinding outputMessageBinding; /** * @param schoolName * @param content */ @Override public void getCollection(String schoolName, String content) { CollectionRequest request = new CollectionRequest(); request.setSchoolName(schoolName); request.setContent(content); outputMessageBinding.output().send(MessageBuilder.withPayload(request).build()); } }
注: 主要是兩點
- @EnableBinding 定義
- outputMessageBinding.output().send(MessageBuilder.withPayload(request).build()); 生產(chǎn)消息
三、消費者
(1)結(jié)構(gòu)
(2)pom.xml
導(dǎo)入base的依賴即可,因為相關(guān)共用依賴在base中已經(jīng)引入
<dependency> <groupId>com.zrk</groupId> <artifactId>mq-service-base</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
(3)定義綁定(接口)
InputMessageBinding.java
public interface InputMessageBinding { String INPUT = "message-center-input"; @Input(INPUT) SubscribableChannel input(); }
注: 消費者這里與生產(chǎn)者不同,用的是SubscribableChannel ,而生產(chǎn)者用的是MessageChannel
(4)添加配置
# rabbitmq連接信息 spring.rabbitmq.addresses=192.168.1.125 spring.rabbitmq.port=5672 spring.rabbitmq.username=admin spring.rabbitmq.password=123456 spring.cloud.stream.bindings.message-center-input.destination=message-center spring.cloud.stream.bindings.message-center-input.group=${spring.application.name}
(5) 調(diào)用方法
CollectionReceiver.java
@Slf4j @EnableBinding(InputMessageBinding.class) public class CollectionReceiver { @StreamListener(InputMessageBinding.INPUT) public void handle(String value){ log.info("[消息] 接收到發(fā)送消息MQ: {}", value); CollectionRequest request = JSON.parseObject(value, CollectionRequest.class); log.info("處理收集信息:" + request.toString()); } }
注: 主要是兩點
- @EnableBinding 定義
- @StreamListener 注冊監(jiān)聽
至此,生產(chǎn)者與消費者都創(chuàng)建完成,分別啟動兩個項目,并調(diào)用生產(chǎn)者接口進(jìn)行驗證:
四、驗證 在postman 訪問生產(chǎn)者接口:
localhost:30110/collection/getCollectionschoolName=‘zrk’&content=‘send message to rabbitmq’
觀察消費者日志:
查看rabbitmq首頁
則證明已經(jīng)整合成功,接下來將研究一下更多的配置與用法。
如果有需要,可以參考項目完整代碼:https://github.com/zrk333/mq-service
到此這篇關(guān)于SpringCloud Stream 整合RabbitMQ的文章就介紹到這了,更多相關(guān)SpringCloud Stream 整合RabbitMQ內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):稀疏數(shù)組
今天帶大家了解一下Java稀疏數(shù)組的相關(guān)知識,文中有非常詳細(xì)的介紹及代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下2021-08-08SpringBoot?Validation快速實現(xiàn)數(shù)據(jù)校驗的示例代碼
在實際開發(fā)中,肯定會經(jīng)常遇到對參數(shù)字段進(jìn)行校驗的場景,通常我們只能寫大量的if else來完成校驗工作,而如果使用SpringBoot Validation則可以輕松的通過注解來完成,接下來小編給大家介紹下利用SpringBoot?Validation快速實現(xiàn)數(shù)據(jù)校驗的示例代碼,需要的朋友參考下吧2022-06-06Java實戰(zhàn)網(wǎng)上電子書城的實現(xiàn)流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+JSP+maven+Mysql實現(xiàn)一個網(wǎng)上電子書城,大家可以在過程中查缺補(bǔ)漏,提升水平2022-01-01詳解Java8新特性Stream之list轉(zhuǎn)map及問題解決
這篇文章主要介紹了詳解Java8新特性Stream之list轉(zhuǎn)map及問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Java數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹的原理與實現(xiàn)
平衡樹(Balance Tree,BT) 指的是,任意節(jié)點的子樹的高度差都小于等于1。常見的符合平衡樹的有,B樹(多路平衡搜索樹)、AVL樹(二叉平衡搜索樹)等。本文將詳細(xì)介紹平衡二叉樹的概念和實現(xiàn)原理以及它的實現(xiàn)2022-01-01