【RocketMQ】SpringBoot集成RocketMQ

SpringBoot集成RocketMQ
首先依舊是引入依賴

<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.2</version>
</dependency>

然后就可以編寫發送不同類型消息的代碼了

package blossom.project.springbootkp.seckillproducer;import blossom.project.springbootkp.seckillproducer.entity.MsgModel;
import com.alibaba.fastjson.JSONObject;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.apache.rocketmq.spring.support.RocketMQHeaders;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;import java.util.Arrays;
import java.util.List;@SpringBootTest
class SecKillProducerApplicationTests {private List<MsgModel> msgModels = Arrays.asList(new MsgModel("qwer", 1L, "下單"),new MsgModel("qwer", 1L, "短信"),new MsgModel("qwer", 1L, "物流"),new MsgModel("zxcv", 2L, "下單"),new MsgModel("zxcv", 2L, "短信"),new MsgModel("zxcv", 2L, "物流"));@Autowiredprivate RocketMQTemplate rocketMQTemplate;@Testvoid syncProducer() {rocketMQTemplate.syncSend("bootTestTopic","使用springboot集成rocketmq");}@Testvoid asyncProducer(){rocketMQTemplate.asyncSend("bootTestTopic", "發送一條異步消息", new SendCallback() {@Overridepublic void onSuccess(SendResult sendResult) {System.out.println("發送成功");}@Overridepublic void onException(Throwable throwable) {System.out.println("發送失敗"+throwable.getMessage());}});}@Testvoid oneWayProducer(){rocketMQTemplate.sendOneWay("bootTestTopic","發送一個單向消息");}@Testvoid delayProducer(){Message<String> message = MessageBuilder.withPayload("這是一條延遲消息").build();rocketMQTemplate.syncSend("bootTestTopic",message,3000,2);}@Testvoid orderedProducer(){msgModels.forEach(x->{String s = JSONObject.toJSONString(x);rocketMQTemplate.syncSendOrderly("orderlyTopic", s,x.getOrderSn());});}@Testvoid tagProducer(){rocketMQTemplate.syncSend("bootTestTopic:tagA","我是一個帶標簽的消息");}@Testvoid keyProducer(){Message<String> message = MessageBuilder.withPayload("我是一個帶有key的消息").setHeader(RocketMQHeaders.KEYS, "testKey").build();rocketMQTemplate.syncSend("bootTestTopic",message);}
}
對于不同的消息類型,我們可以使用不同的方式去接收。
創建一個順序消息的監聽器
@Component
@RocketMQMessageListener(topic = "orderlyTopic",consumerGroup = "boot-orderly-consumer-group",consumeMode = ConsumeMode.ORDERLY, //順序消費模式 單線程maxReconsumeTimes = 5) //最大重試次數
public class OrderlyMessageListener implements RocketMQListener<MessageExt> {@Overridepublic void onMessage(MessageExt messageExt) {MsgModel msgModel = JSON.parseObject(new String(messageExt.getBody()), MsgModel.class);System.out.println(msgModel);}
}
普通的創建一個監聽器
@Component
@RocketMQMessageListener(topic = "bootTestTopic",consumerGroup = "boot-consumuer-group")
public class SimpleMessageListener implements RocketMQListener<MessageExt> {/*** 這個方法就是消費者方法* 這里的String就是消息內容* 這里的泛型就是這里的參數類型* 如果泛型指定了固定的類型 那么消息體就是我們的參數* 如果我們的類型設定為具體的類型 那么我們只能拿到消息體* 而如果我們把消息類型設定為MessageExt類型,那么我們可以拿到消息頭* ------------------------------------------------* 只要這個方法不報錯 就會直接完成消息的接收 而如果報錯了 就會重試* @param msg*/@Overridepublic void onMessage(MessageExt msg) {String keys = msg.getKeys();System.out.println("接收到的keys為"+keys);String body = new String(msg.getBody());System.out.println("接收到的消息體為"+body);}
}
創建一個識別tag標簽的監聽器
@RocketMQMessageListener(topic = "bootTestTopic",consumerGroup = "boot-tag-consumer-group",
selectorType = SelectorType.TAG, //tag過濾模式
selectorExpression = "tagA || tagB") //tag標簽匹配模式
public class TagMessageListener implements RocketMQListener<MessageExt> {@Overridepublic void onMessage(MessageExt msg) {System.out.println(new String(msg.getBody()));}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42645.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42645.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42645.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Vue2-全局事件總線、消息的訂閱與發布、TodoList的編輯功能、$nextTick、動畫與過渡

&#x1f954;&#xff1a;高度自律即自由 更多Vue知識請點擊——Vue.js VUE2-Day9 全局事件總線1、安裝全局事件總線2、使用事件總線&#xff08;1&#xff09;接收數據&#xff08;2&#xff09;提供數據&#xff08;3&#xff09;組件銷毀前最好解綁 3、TodoList中的孫傳父&…

【Git】Git中用到的一些命令

Git文件有四種狀態&#xff1a; 未跟蹤未修改&#xff08;已跟蹤&#xff09;已修改&#xff08;已跟蹤&#xff09;已暫存&#xff08;已跟蹤&#xff09; 通常我們將項目clone下來就會處于已跟蹤狀態 1、git diff命令 git diff&#xff1a;查看沒有暫存的文件更新哪些部分…

js判斷手指的上滑,下滑,左滑,右滑,事件監聽 和 判斷鼠標滾輪向上滾動滑輪向下滾動

js判斷手指的上滑&#xff0c;下滑&#xff0c;左滑&#xff0c;右滑&#xff0c;事件監聽 和 判斷鼠標滾輪向上滾動滑輪向下滾動 pc端 判斷鼠標滾輪向上滾動滑輪向下滾動 const scrollFunc (e) > { e e || window.event; let wheelDelta e.wheelDelta ? e.wheelDelta…

Spring Clould 部署 - Docker

視頻地址&#xff1a;微服務&#xff08;SpringCloudRabbitMQDockerRedis搜索分布式&#xff09; 初識Docker-什么是Docker&#xff08;P42&#xff0c;P43&#xff09; 微服務雖然具備各種各樣的優勢&#xff0c;但服務的拆分通用給部署帶來了很大的麻煩。 分布式系統中&…

[強網杯 2019]隨便注

輸入1‘ 輸入1“ 和輸入1 一樣說明是由‘閉合 然后我們嘗試輸入select 這里提示過濾了select&#xff0c;說明聯合查詢&#xff0c;報錯注入&#xff0c;布爾,時間盲注就都不可以使用了。我們只剩下了 堆疊注入。 或者將select編碼繞開也可以。 按sql注入測試1 or 11 # ?然…

Unity 物體的運動之跟隨鼠標

你想讓鼠標點擊哪里&#xff0c;你的運動的對象就運動到哪里嗎&#xff1f; Please follow me ! 首先&#xff0c;你要先添加一個Plane ,以及你的圍墻&#xff0c;你的移動的物體 想要實現跟隨鼠標移動&#xff0c;我們先創建一個腳本 using System.Collections; using Syst…

銅卡計混合法比熱測試儀絕熱量熱計的高精度主動控制解決方案

摘要&#xff1a;在下落法比熱容測試中絕熱量熱計的漏熱是最主要誤差源&#xff0c;為實現絕熱量熱計的低漏熱要求&#xff0c;本文介紹了主動護熱式等溫絕熱技術以及相應的解決方案。方案的核心一是采用循環水冷卻金屬圓筒給量熱計和護熱裝置提供低溫環境或恒定冷源&#xff0…

黑馬點評-項目集成git及redis實現短信驗證碼登錄

目錄 IDEA集成git 傳統session存在的問題 redis方案 業務流程 選用的數據結構 整體訪問流程 發送短信驗證碼 獲取校驗驗證碼 配置登錄攔截器 攔截器注冊配置類 攔截器 用戶狀態刷新問題 刷新問題解決方案 IDEA集成git 遠程倉庫采用碼云&#xff0c;創建好倉庫&…

【O2O領域】Axure外賣訂餐騎手端APP原型圖,外賣配送原型設計圖

作品概況 頁面數量&#xff1a;共 110 頁 兼容軟件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 應用領域&#xff1a;外賣配送、生鮮配送 作品申明&#xff1a;頁面內容僅用于功能演示&#xff0c;無實際功能 作品特色 本品為外賣訂餐騎手端APP原型設計圖&#x…

CentOS下MySQL的徹底卸載的幾種方法

這里我為大家詳細講解下“CentOS下MySQL的徹底卸載的幾種方法”的完整攻略。 一、關閉MySQL服務 在開始操作之前&#xff0c;需要先關閉MySQL服務。可以使用以下命令來關閉MySQL服務&#xff1a; systemctl stop mysqld 或者 service mysqld stop 二、使用yum命令卸載MySQL…

微前端 - qiankun

qiankun 是一個基于 single-spa 的微前端實現庫&#xff0c;旨在幫助大家能更簡單、無痛的構建一個生產可用微前端架構系統。 本文主要記錄下如何接入 qiankun 微前端。主應用使用 vue2&#xff0c;子應用使用 vue3、react。 一、主應用 主應用不限技術棧&#xff0c;只需要提…

數據結構之線性表的類型運用Linear Lists: 數組,棧,隊列,鏈表

線性表 定義 一個最簡單&#xff0c;最基本的數據結構。一個線性表由多個相同類型的元素穿在一次&#xff0c;并且每一個元素都一個前驅&#xff08;前一個元素&#xff09;和后繼&#xff08;后一個元素&#xff09;。 線性表的類型 常見的類型&#xff1a;數組、棧、隊列…

mysql、redis面試題

mysql 相關 1、數據庫優化查詢方法 外鍵、索引、聯合查詢、選擇特定字段等等2、簡述mysql和redis區別 redis&#xff1a; 內存型非關系數據庫&#xff0c;數據保存在內存中&#xff0c;速度快mysql&#xff1a;關系型數據庫&#xff0c;數據保存在磁盤中&#xff0c;檢索的話&…

[Go版]算法通關村第十二關黃金——字符串沖刺題

目錄 題目&#xff1a;最長公共前綴解法1&#xff1a;縱向對比-循環內套循環寫法復雜度&#xff1a;時間復雜度 O ( n ? m ) O(n*m) O(n?m)、空間復雜度 O ( 1 ) O(1) O(1)Go代碼 解法2&#xff1a;橫向對比-兩兩對比&#xff08;類似合并K個數組、合并K個鏈表&#xff09;復…

okhttp下載文件 Java下載文件 javaokhttp下載文件 下載文件 java下載 okhttp下載 okhttp

okhttp下載文件 Java下載文件 javaokhttp下載文件 下載文件 java下載 okhttp下載 okhttp 1、引入Maven1.1、okhttp發起請求官網Demo 2、下載文件3、擴充&#xff0c;讀寫 txt文件內容3.1讀寫內容 示例 http客戶端 用的是 okhttp&#xff0c;也可以用 UrlConnetcion或者apache …

SD WebUI 擴展:prompt-all-in-one

sd-webui-prompt-all-in-one 是一個基于 Stable Diffusion WebUI 的擴展&#xff0c;旨在提高提示詞/反向提示詞輸入框的使用體驗。它擁有更直觀、強大的輸入界面功能&#xff0c;它提供了自動翻譯、歷史記錄和收藏等功能&#xff0c;它支持多種語言&#xff0c;滿足不同用戶的…

[MAUI]在.NET MAUI中實現可拖拽排序列表

文章目錄 創建可拖放控件創建綁定服務類拖拽&#xff08;Drag&#xff09;拖拽懸停&#xff0c;經過&#xff08;DragOver&#xff09;釋放&#xff08;Drop&#xff09; 創建頁面元素最終效果項目地址 .NET MAUI 中提供了拖放(drag-drop)手勢識別器&#xff0c;允許用戶通過拖…

Mysql驅動包下載

第一步&#xff1a;下載地址 MySQL :: Download Connector/J 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a;解壓 第五步&#xff1a;找到驅動包&#xff0c;放入項目使用即可

管理類聯考——邏輯——真題篇——按知識分類——匯總篇——三、綜合推理

文章目錄 題-綜合推理-分類1-排序真題&#xff08;2016-54-55&#xff09;-難度最高*****-綜合推理-分類1-排序-畫表排除法真題&#xff08;2016-54&#xff09;真題&#xff08;2016-55&#xff09;真題&#xff08;2019-36&#xff09;-綜合推理-分類1-排序真題&#xff08;2…

【AIGC】 國內版聊天GPT

國內版聊天GPT 引言一、國內平臺二、簡單體驗2.1 提問2.2 角色扮演2.3 總結畫圖 引言 ChatGPT是OpenAI發開的聊天程序&#xff0c;功能強大&#xff0c;可快速獲取信息&#xff0c;節省用戶時間和精力&#xff0c;提供個性化的服務。目前國產ChatGPT&#xff0c;比如文心一言&a…