SpringCloud?Stream?整合RabbitMQ的基本步驟
本篇簡單介紹SpringCloud Stream 整合RabbitMQ基本步驟:
- 引入SpringCloud
- 引入SpringCloud Stream相關(guān)依賴
- 定義綁定接口: 消息生產(chǎn)者(Output…Binding) 、消息消費(fèi)者(Input…Binding)
- @EnableBinding 在對(duì)應(yīng)類上進(jìn)行定義
- @StreamListener 在對(duì)應(yīng)方法上創(chuàng)建監(jiān)聽用來消費(fèi)消息
- 調(diào)用output的send()方法生產(chǎn)消息
一、項(xiàng)目介紹
演示SpringCloud Stream 整合RabbitMQ,項(xiàng)目可以在一個(gè)工程里完成,本次建立了一個(gè)工程mq-service,其中包含三個(gè)Module:
- mq-service-base :基礎(chǔ)模塊(包含了共用依賴、共用變量)
- mq-service-producer :生產(chǎn)者
- mq-service-consumer :消費(fèi)者
注: 完全可以在一個(gè)工程里實(shí)現(xiàn),這里為了區(qū)分,并為了后續(xù)單獨(dú)啟動(dòng)或停止生產(chǎn)者或消費(fèi)者做實(shí)驗(yàn),也為了適應(yīng)實(shí)際應(yīng)用項(xiàng)目,所以創(chuàng)建了不同Module
(1)版本
- SpringBoot : 2.0.6.RELEASE
- SpringCloud : Finchley.SR2
- RabbitMQ : 3.8.1
(2)項(xiàng)目整體結(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的依賴即可,因?yàn)橄嚓P(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()); } }
注: 主要是兩點(diǎn)
- @EnableBinding 定義
- outputMessageBinding.output().send(MessageBuilder.withPayload(request).build()); 生產(chǎn)消息
三、消費(fèi)者
(1)結(jié)構(gòu)
(2)pom.xml
導(dǎo)入base的依賴即可,因?yàn)橄嚓P(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(); }
注: 消費(fèi)者這里與生產(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()); } }
注: 主要是兩點(diǎn)
- @EnableBinding 定義
- @StreamListener 注冊(cè)監(jiān)聽
至此,生產(chǎn)者與消費(fèi)者都創(chuàng)建完成,分別啟動(dòng)兩個(gè)項(xiàng)目,并調(diào)用生產(chǎn)者接口進(jìn)行驗(yàn)證:
四、驗(yàn)證 在postman 訪問生產(chǎn)者接口:
localhost:30110/collection/getCollectionschoolName=‘zrk’&content=‘send message to rabbitmq’
觀察消費(fèi)者日志:
查看rabbitmq首頁
則證明已經(jīng)整合成功,接下來將研究一下更多的配置與用法。
如果有需要,可以參考項(xiàng)目完整代碼:https://github.com/zrk333/mq-service
到此這篇關(guān)于SpringCloud Stream 整合RabbitMQ的文章就介紹到這了,更多相關(guān)SpringCloud Stream 整合RabbitMQ內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):稀疏數(shù)組
今天帶大家了解一下Java稀疏數(shù)組的相關(guān)知識(shí),文中有非常詳細(xì)的介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下2021-08-08簡單實(shí)現(xiàn)java數(shù)獨(dú)游戲
這篇文章主要教大家如何簡單實(shí)現(xiàn)java數(shù)獨(dú)游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12SpringBoot?Validation快速實(shí)現(xiàn)數(shù)據(jù)校驗(yàn)的示例代碼
在實(shí)際開發(fā)中,肯定會(huì)經(jīng)常遇到對(duì)參數(shù)字段進(jìn)行校驗(yàn)的場(chǎng)景,通常我們只能寫大量的if else來完成校驗(yàn)工作,而如果使用SpringBoot Validation則可以輕松的通過注解來完成,接下來小編給大家介紹下利用SpringBoot?Validation快速實(shí)現(xiàn)數(shù)據(jù)校驗(yàn)的示例代碼,需要的朋友參考下吧2022-06-06Java實(shí)戰(zhàn)網(wǎng)上電子書城的實(shí)現(xiàn)流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+JSP+maven+Mysql實(shí)現(xiàn)一個(gè)網(wǎng)上電子書城,大家可以在過程中查缺補(bǔ)漏,提升水平2022-01-01Java中兩個(gè)List之間的比較方法(差集、交集和并集)
在業(yè)務(wù)的開發(fā)過程中會(huì)經(jīng)常用到兩個(gè)List集合相互取值的情況,下面這篇文章主要給大家介紹了關(guān)于Java中兩個(gè)List之間的比較方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06基于Java實(shí)現(xiàn)五子棋小游戲(附源碼)
這篇文章主要為大家介紹了如何通過Java實(shí)現(xiàn)簡單的五子棋游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java游戲開發(fā)有一定幫助,需要的可以參考一下2022-11-11java正則表達(dá)式提取數(shù)字的方法實(shí)例
這篇文章主要介紹了java正則表達(dá)式提取數(shù)字的方法,還有去除字符串?dāng)?shù)字的方法,大家參考使用吧2013-12-12詳解Java8新特性Stream之list轉(zhuǎn)map及問題解決
這篇文章主要介紹了詳解Java8新特性Stream之list轉(zhuǎn)map及問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Java數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹的原理與實(shí)現(xiàn)
平衡樹(Balance Tree,BT) 指的是,任意節(jié)點(diǎn)的子樹的高度差都小于等于1。常見的符合平衡樹的有,B樹(多路平衡搜索樹)、AVL樹(二叉平衡搜索樹)等。本文將詳細(xì)介紹平衡二叉樹的概念和實(shí)現(xiàn)原理以及它的實(shí)現(xiàn)2022-01-01過濾器 和 攔截器的 6個(gè)區(qū)別(別再傻傻分不清了)
這篇文章主要介紹了過濾器 和 攔截器的 6個(gè)區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06