Springboot詳解RocketMQ實(shí)現(xiàn)消息發(fā)送與接收流程
springboot+rockermq 實(shí)現(xiàn)簡(jiǎn)單的消息發(fā)送與接收
普通消息的發(fā)送方式有3種:?jiǎn)蜗虬l(fā)送、同步發(fā)送和異步發(fā)送。
下面來介紹下 springboot+rockermq 整合實(shí)現(xiàn) 普通消息的發(fā)送與接收
- 創(chuàng)建Springboot項(xiàng)目,添加rockermq 依賴
<!--rocketMq依賴--> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <version>2.2.1</version> </dependency>
- 配置rocketmq
# 端口
server:
port: 8083# 配置 rocketmq
rocketmq:
name-server: 127.0.0.1:9876
#生產(chǎn)者
producer:
#生產(chǎn)者組名,規(guī)定在一個(gè)應(yīng)用里面必須唯一
group: group1
#消息發(fā)送的超時(shí)時(shí)間 默認(rèn)3000ms
send-message-timeout: 3000
#消息達(dá)到4096字節(jié)的時(shí)候,消息就會(huì)被壓縮。默認(rèn) 4096
compress-message-body-threshold: 4096
#最大的消息限制,默認(rèn)為128K
max-message-size: 4194304
#同步消息發(fā)送失敗重試次數(shù)
retry-times-when-send-failed: 3
#在內(nèi)部發(fā)送失敗時(shí)是否重試其他代理,這個(gè)參數(shù)在有多個(gè)broker時(shí)才生效
retry-next-server: true
#異步消息發(fā)送失敗重試的次數(shù)
retry-times-when-send-async-failed: 3
- 新建一個(gè) controller 來做消息發(fā)送:
package com.example.springbootrocketdemo.controller; import org.apache.rocketmq.client.producer.SendCallback; import org.apache.rocketmq.client.producer.SendResult; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * 普通信息的三種方式:同步、異步、單向 * @author qzz */ @RestController public class RocketMQCOntroller { @Autowired private RocketMQTemplate rocketMQTemplate; /** * 發(fā)送普通消息 * convertAndSend(String destination, Object payload) 發(fā)送字符串比較方便 */ @RequestMapping("/send") public void send(){ rocketMQTemplate.convertAndSend("test-topic","test-message"); } /** * 發(fā)送同步消息 */ @RequestMapping("/testSyncSend") public void testSyncSend(){ //參數(shù)一:topic 如果想添加tag,可以使用"topic:tag"的寫法 //參數(shù)二:消息內(nèi)容 SendResult sendResult = rocketMQTemplate.syncSend("test-topic","同步消息測(cè)試"); System.out.println(sendResult); } /** * 發(fā)送異步消息 */ @RequestMapping("/testASyncSend") public void testASyncSend(){ //參數(shù)一:topic 如果想添加tag,可以使用"topic:tag"的寫法 //參數(shù)二:消息內(nèi)容 //參數(shù)三:回調(diào) rocketMQTemplate.asyncSend("test-topic", "異步消息測(cè)試", new SendCallback() { @Override public void onSuccess(SendResult sendResult) { System.out.println(sendResult); } @Override public void onException(Throwable throwable) { System.out.println("消息發(fā)送異常"); throwable.printStackTrace(); } }); } /** * 發(fā)送單向消息 */ @RequestMapping("/testOneWay") public void testOneWay(){ //參數(shù)一:topic 如果想添加tag,可以使用"topic:tag"的寫法 //參數(shù)二:消息內(nèi)容 rocketMQTemplate.sendOneWay("test-topic","單向消息測(cè)試"); } }
SpringBoot給我們提供了RocketMQTemplate模板類,我們利用這個(gè)類可以以多種形式發(fā)送消息。
發(fā)送方法指定Topic主題test-topic。
- 新建消息消費(fèi)者監(jiān)聽RocketMQConsumerListener,監(jiān)聽消息,消費(fèi)消息
package com.example.springbootrocketdemo.config; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.core.RocketMQListener; import org.springframework.stereotype.Service; /** * 消費(fèi)消息 * 配置RocketMQ監(jiān)聽 * @author qzz */ @Service @RocketMQMessageListener(consumerGroup = "test",topic = "test-topic") public class RocketMQConsumerListener implements RocketMQListener<String> { @Override public void onMessage(String s) { System.out.println("消費(fèi)消息:"+s); } }
消費(fèi)者類要實(shí)現(xiàn)RocketMQListener
接口,以及動(dòng)態(tài)指定消息類型String。
類上要加上@RocketMQMessageListener注解
,指定topic主題test-topic,以及消費(fèi)者組test
簡(jiǎn)單的消息發(fā)送與接收搭建完畢!
- 啟動(dòng)服務(wù),測(cè)試消息消費(fèi)
測(cè)試同步消息:
測(cè)試異步消息:
測(cè)試單向消息:
測(cè)試OK,成功消費(fèi)!
到此這篇關(guān)于Springboot詳解RocketMQ實(shí)現(xiàn)消息發(fā)送與接收流程的文章就介紹到這了,更多相關(guān)Springboot 消息發(fā)送與接收內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot打包為Docker鏡像并部署的實(shí)現(xiàn)
這篇文章主要介紹了Springboot打包為Docker鏡像并部署的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12struts2中通過json傳值解決亂碼問題的實(shí)現(xiàn)方法
這篇文章主要介紹了struts2中通過json傳值解決亂碼問題的實(shí)現(xiàn)方法,涉及js編碼及java解碼的相關(guān)操作技巧,需要的朋友可以參考下2016-06-06Eclipse可視化插件WindowBuilder的安裝方法
這篇文章主要介紹了Eclipse可視化插件WindowBuilder的安裝方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Java Web基于Session的登錄實(shí)現(xiàn)方法
這篇文章主要介紹了Java Web基于Session的登錄實(shí)現(xiàn)方法,涉及Java針對(duì)session的操作及表單提交與驗(yàn)證技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10一次由Lombok的@AllArgsConstructor注解引發(fā)的錯(cuò)誤及解決
這篇文章主要介紹了一次由Lombok的@AllArgsConstructor注解引發(fā)的錯(cuò)誤及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09