精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

你心心念念的RabbitMQ個人實踐來了來了它來了

開發 前端
MQ(Message Queue)就是消息隊列,其有點有很多:解耦、異步、削峰等等,本文來聊一下RabbitMQ的一些概念以及使用。

前言

MQ(Message Queue)就是消息隊列,其有點有很多:解耦、異步、削峰等等,本文來聊一下RabbitMQ的一些概念以及使用。

RabbitMq

案例

Springboot整合RabbitMQ簡單案例

基本概念

  • Exchange:消息交換機,它指定消息按什么規則,路由到哪個隊列。
  • Queue:消息隊列載體,每個消息都會被投入到一個或多個隊列。
  • Binding:綁定,它的作用就是把exchange和queue按照路由規則綁定起來。
  • Routing Key:路由關鍵字,exchange根據這個關鍵字進行消息投遞。
  • Producer:消息生產者,就是投遞消息的程序。
  • Consumer:消息消費者,就是接受消息的程序。

發布消息到RabbitMQ需要經過兩步:

  1. producer → exchange
  2. exchange 根據 exchange 的類型和 routing key 確定將消息投遞到哪個隊列

工作流程

了解了RabbitMQ的一些概念,我們來捋捋使用RabbitMQ的流程:

  1. 創建Exchange
  2. 創建Queue
  3. 將Queue綁定進Exchange中(此處會設置routing key)
  4. 生產者發布消息
  5. 消費者訂閱消息

交換機(Exchange)

交換機可以綁定隊列,綁定時可以給隊列指定路由(Routing key)和參數(Arguments)

所有的消息發送都是經過交換機轉發到隊列的,而不是直接到隊列中

交換機類型:

  • direct
  • 根據確定的路由(routing key)轉發消息到隊列中(一條消息可以發到多個隊列,只要路由相同)
  • fanout
  • 路由無效,只要和該交換機綁定的隊列,都能接收到消息
  • topic
  • 允許路由使用*和#來進行模糊匹配
  • *表示一個單詞
  • 表示任意數量(零個或多個)單詞
  • 例如:如果隊列的路由為com.# 那么往交換機發消息是,路由填com.ccc 隊列就可以收到消息
  • headers
  • 忽略路由,由參數(Arguments)來確定轉發的隊列

消息過期時間TTL

有兩種方式設置TTL,創建隊列時設置整個隊列的TTL或者在發送消息時單獨設置每條消息的TTL,消息存活時間取兩者的最小值。

  1. 創建隊列時設置
  2. 是消息的存活時間,不是隊列的存活時間,別搞混了。
  3. @Beanpublic Queue queue(){ Map<String, Object> args = new HashMap<>(); args.put("x-message-ttl", 5000); // 設置隊列中的消息5秒過期 return new Queue("queueName",true, false, false, args);}
  4. 發送消息時設置
  5. public void makeOrder(String userid,String productid,int num){ String exchangeName = "ttl_exchange"; String routingKey = "ttlmessage"; //給消息設置過期時間 MessagePostProcessor messagePostProcessor = new MessagePostProcessor(){ public Message postProcessMessage(Message message){ // 設置消息5秒過期 message.getMessageProperties().setExpiration("5000"); return message; } } rabbitTemplate.convertAndSend(exchangeName,routingKey,"message",messagePostProcessor);}

死信隊列

死信隊列也是一個正常隊列,只是當綁定了死信隊列的隊列滿足相應條件,就會將滿足條件的消息轉移到死信隊列中。

進入死信隊列的條件:

  1. 消息被拒絕
  2. 消息過期(超時)
  3. 隊列達到最大長度

死信隊列的配置:

  1. 按照正常步驟定義一個隊列(交換機、隊列、綁定)
  2. 給需要綁定死信隊列的隊列添加x-dead-letter-exchange(死信隊列的交換機)和x-dead-letter-routing-key(死信隊列的路由)參數
  3. @Beanpublic Queue queue(){ Map<String, Object> args = new HashMap<>(); args.put("x-dead-letter-exchange", "死信隊列交換機名稱"); args.put("x-dead-letter-routing-key", "死信隊列路由"); return new Queue("queueName",true, false, false, args);}

如何保證MQ消息正確送達與消費

可靠性生產和推送

步驟:

  1. 發送消息前數據庫保存MQ消息發送日志
  2. MQ消息發送后使用回調更新日志狀態

實現:

上面我們講了,發布消息到RabbitMQ需要經過兩步:

producer → exchange
exchange 根據 exchange 的類型和 routing key 確定將消息投遞到哪個隊列

所以,發布消息的確認也分兩個部分,以下是確認步驟:

  1. 修改MQ應答機制(yml)
  2. spring: rabbitmq: username: rmq password: 123456 virtual-host: / host: localhost port: 5672 # 發送消息確認,producer -> exchange publisher-confirm-type: correlated # 發送消息確認,exchange -> queue publisher-returns: true
  3. 新增mq的回調方法
  4. /** * PostConstruct注解好多人以為是Spring提供的。其實是Java自己的注解。 * Java中該注解的說明:@PostConstruct該注解被用來修飾一個非靜態的void()方法。 * 被@PostConstruct修飾的方法會在服務器加載Servlet的時候運行,并且只會被服務器執行一次。 * PostConstruct在構造函數之后執行,init()方法之前執行。 * Constructor(構造方法) -> @Autowired(依賴注入) -> @PostConstruct(注釋的方法) */@PostConstructprivate void regCallBack() { // producer -> exchange 成功或失敗都會觸發此回調 rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() { @Override public void confirm(CorrelationData correlationData, boolean ack, String cause) { // 這個id是在消息發送的時候傳入的 String id = correlationData.getId(); // 如果ack為true代表消息被mq成功接收 if (!ack) { // 應答失敗,修改日志狀態 System.out.println("exchange 應答失敗,做失敗處理!"); } else { // 應答成功,修改日志狀態 System.out.println("exchange 成功處理"); } } }); // 這個回調只有exchange -> queue 失敗時才會觸發 rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() { @Override public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) { System.out.println("exchange -> queue 發送失敗"); } });}
  5. 修改MQ發送消息的方法,增加日志id的傳遞
  6. String correlationId = "這是日志id";rabbitTemplate.convertAndSend(exchange, routeKey, message, new MessagePostProcessor() { @Override public Message postProcessMessage(Message message) throws AmqpException { // 消費者需要correlationId才做這個處理 message.getMessageProperties().setCorrelationId(correlationId); return message; }}, new CorrelationData(correlationId));// 如果消費者不需要獲取correlationId,則用下面這種即可rabbitTemplate.convertAndSend(exchange, routeKey, msg, new CorrelationData(correlationId));

可靠性消費

步驟:

  • 開啟手動應答
  • 監聽器增加手動應答邏輯

實現:

  1. 開啟手動應答
  2. spring: rabbitmq: username: rmq password: 123456 virtual-host: / host: localhost port: 5672 listener: simple: acknowledge-mode: manual # 將自動應答ack模式改成手動應答
  3. acknowledge-mode有三種類型:
  4. nome:不進行ack,rabbitmq默認消費者正確處理所有請求
  5. munual:手動確認
  6. auto:自動確認消息(默認類型)。如果消費者拋出異常,則消息重回隊列。
  7. 監聽器增加手動應答邏輯
  8. @RabbitListener(queues = {"隊列名字"})public void messageConsumer(String orderMsg, Channel channel, @Headers Map<String,Object> headers) throws Exception{ // 需要producer做相應處理,consumer才能拿到correlationId String correlationId = messages.getMessageProperties().getCorrelationId(); System.out.println("消息為:" + orderMsg); long tag = Long.parseLong(headers.get(AmqpHeaders.DELIVERY_TAG).toString()); try { // 消費成功,進行確認 channel.basicAck(tag, false); } catch (IOException e) { // 消費失敗,重發 // requeue代表是否重發,為false則直接將消息丟棄,有死信就進入死信隊列 channel.basicNack(tag, false, true); }}

總結

本文介紹了RabbitMQ的一些概念和簡單使用,有不少東西其實是沒有講清楚的,比如publisher-confirm-type和acknowledge-mode的幾種類型的區別等等。主要是在官方文檔找不到相關的細致描述,查文檔的能力還是有待提高。。。

責任編輯:武曉燕 來源: Java碼農之路
相關推薦

2021-04-16 16:21:02

鴻蒙HarmonyOS應用開發

2025-01-15 10:02:09

APIVueDOM

2017-08-14 16:11:28

戴爾電腦

2024-01-15 16:34:13

模型訓練

2023-03-15 08:03:31

2022-07-19 08:04:04

HTTP應用層協議

2021-10-28 18:58:57

動態規劃數據結構算法

2021-09-28 14:25:48

iPhone 13蘋果手機

2013-07-12 09:59:58

Android 5.0

2010-02-03 13:25:34

云計算

2024-05-08 08:50:39

React19模式UI

2015-03-05 09:26:28

網絡中立命名數據網絡FDD

2024-07-23 08:59:17

Set開發前端

2016-09-02 08:20:33

OpsDevWWDCDevOps

2023-04-23 18:56:53

LinuxKubuntu

2021-04-25 08:24:10

Linux系統Adobe全家桶Office套件

2018-04-25 15:53:12

霧計算

2021-01-28 16:58:12

數字貨幣加密貨幣區塊鏈

2014-06-23 09:04:56

Docker
點贊
收藏

51CTO技術棧公眾號

欧美天堂在线视频| 欧美人妻一区二区| 亚洲精品一区av| 亚洲免费伊人电影| 久99久视频| 亚洲系列第一页| 亚洲三级影院| 中文字幕久久精品| 又黄又爽的网站| 久久亚洲精品中文字幕| 亚洲成人av中文| 日韩欧美激情一区二区| www.av在线.com| 日本欧美一区二区在线观看| 欧美激情啊啊啊| ass极品国模人体欣赏| 超碰在线成人| 91精品国产欧美日韩| 日本三区在线观看| 丰乳肥臀在线| 亚洲色图视频网| 日本不卡二区高清三区| 午夜精品久久久久久久99老熟妇| 蜜桃精品在线观看| 久久久久久久久亚洲| 中文字幕乱码av| 精品福利久久久| 欧美精品一区二区在线观看| 欧美一级视频在线| 国产一区二区主播在线| 欧美日韩国产色| 99在线免费视频观看| 九色porny丨首页在线| 日本一区二区三区久久久久久久久不 | 国产三级精品三级在线观看| 一区在线播放| 欧美日韩成人精品| 深夜福利影院在线观看| 日韩在线理论| 最新日韩中文字幕| 国产一区第一页| 成人精品视频| 最新69国产成人精品视频免费| 亚洲天堂岛国片| 精品国精品国产自在久国产应用| 亚洲奶大毛多的老太婆| 精品夜夜澡人妻无码av| 亚洲8888| 亚洲人成伊人成综合网久久久| av直播在线观看| 青青草原在线亚洲| 亚洲免费影视第一页| 国产免费一区二区三区网站免费| 久久99视频| 中日韩美女免费视频网站在线观看| 一级肉体全黄裸片| 成人一区而且| 超碰97人人做人人爱少妇| 国产成人自拍网站| 欧美视频网站| 久久青草精品视频免费观看| 日韩av在线电影| 免费永久网站黄欧美| 人妖精品videosex性欧美| 波多野结衣午夜| 秋霞午夜鲁丝一区二区老狼| 国产日韩专区在线| 午夜精品久久久久久久96蜜桃| 成人国产一区二区三区精品| 精品蜜桃一区二区三区| 国产精品一区二区婷婷| 国产精品久久久久久久久图文区| 亚洲小说欧美另类激情| www.8ⅹ8ⅹ羞羞漫画在线看| 黑人巨大精品欧美一区二区三区| 国产视频一区二区视频| 欧美一区二区三区婷婷| 欧美变态口味重另类| 国产高清自拍视频| 日韩三级在线| 欧美激情手机在线视频 | 日韩香蕉视频| 国产精品va在线播放我和闺蜜| 亚洲熟女乱色一区二区三区久久久| 国产在线一区二区综合免费视频| 国产亚洲自拍偷拍| 成人三级黄色免费网站| 一区二区三区 在线观看视频| 国产精品久久中文字幕| 亚洲爱爱视频| 精品日韩一区二区三区| 欧美精品日韩在线| 在线欧美日韩| 国产在线观看精品| 飘雪影视在线观看免费观看| 17c精品麻豆一区二区免费| 欧美视频免费看欧美视频| 国产一区二区三区朝在线观看| 日韩一区和二区| a天堂中文字幕| 亚洲国产精品一区| 国产精品一区电影| 三级在线电影| 亚洲一区二区五区| www.精品在线| 蜜桃成人av| 欧美精品第一页在线播放| 在线观看av大片| 91偷拍与自偷拍精品| 日本道在线视频| 精品欧美日韩精品| 精品香蕉在线观看视频一| 午夜精品一区二区三级视频| 日韩精品亚洲专区| 精品乱码一区二区三区| av在线播放国产| 欧美日韩大陆一区二区| 国产免费看av| 黄色另类av| 91日本在线视频| av午夜在线| 在线精品视频一区二区三四| 天天插天天射天天干| 欧美精品一区二区三区久久久竹菊| 国产精品视频永久免费播放| 青青草手机在线| 精品久久久久久久久国产字幕| 特种兵之深入敌后| 99久久.com| 国产欧美精品日韩| av在线日韩国产精品| 日韩欧美亚洲国产一区| 国产黄色三级网站| 亚洲国产网站| 国产日韩一区欧美| 阿v视频在线观看| 精品日韩一区二区三区免费视频| 麻豆国产尤物av尤物在线观看| 国产麻豆精品在线| 国产911在线观看| 国产精品一区二区三区www| 日韩在线免费av| 中文字幕在线观看高清| 国产精品久久久久毛片软件| 91极品视频在线观看| 日韩精品久久久久久久电影99爱| 国产精品美乳在线观看| 秋霞成人影院| 777久久久精品| 国产97免费视频| 国产乱国产乱300精品| 亚洲天堂第一区| jizz18欧美18| 97精品一区二区三区| 日韩中文字幕影院| 欧美丝袜一区二区| 国产亚洲精品熟女国产成人| 免费成人美女在线观看.| 亚洲欧美日韩国产成人综合一二三区 | 少妇献身老头系列| 激情欧美国产欧美| 久草热久草热线频97精品| 成人一区福利| 色婷婷成人综合| 国内精品国产成人国产三级| 一区二区三区在线看| 亚洲国产果冻传媒av在线观看| 香蕉精品999视频一区二区 | 中国美女乱淫免费看视频| 丝袜亚洲精品中文字幕一区| 亚洲一区不卡在线| 综合成人在线| 欧美一级视频在线观看| 成a人片在线观看www视频| 欧美人体做爰大胆视频| 欧美精品videos极品| 99久久精品免费看国产免费软件| 哪个网站能看毛片| 亚洲无中文字幕| 国产综合动作在线观看| 欧美暴力调教| 久久99精品视频一区97| 欧美日韩视频精品二区| 欧美精品在线一区二区| 日本一区二区三区免费视频| 国产免费成人在线视频| 亚洲精品久久一区二区三区777| 久久国产成人| 亚洲小视频在线播放| 日韩av网站在线免费观看| 国产精品揄拍500视频| 丁香高清在线观看完整电影视频| 一区二区三区视频观看| 亚洲精品久久久久avwww潮水| 色妹子一区二区| 久久这里只有精品国产| 中文字幕av不卡| 在线观看免费视频黄| 久久精品免费观看| a在线视频观看| 亚洲精品国产首次亮相| 日本一区视频在线观看免费| 国产精品18hdxxxⅹ在线| 国产噜噜噜噜噜久久久久久久久| www欧美xxxx| 久久人体大胆视频| 国产在线一二三区| 亚洲激情成人网| 99久久精品国产色欲| 欧美在线不卡视频| 亚洲欧美精品一区二区三区| 玉米视频成人免费看| 人与动物性xxxx| 国产喂奶挤奶一区二区三区| 中文字幕乱码一区| 国产乱色国产精品免费视频| 性欧美videossex精品| 亚洲欧美日韩专区| 男人添女荫道口女人有什么感觉| 久久久久久美女精品| 亚洲午夜在线观看| 欧美精品一二| 日本亚洲欧洲精品| 美女少妇全过程你懂的久久 | 黄色三级视频在线播放| 六月丁香婷婷色狠狠久久| 国产成人综合一区| 亚洲欧美不卡| 久草资源站在线观看| 一本色道久久综合| 亚洲 自拍 另类小说综合图区| 欧美粗暴jizz性欧美20| 久久视频免费在线| 亚洲国产老妈| 91传媒免费视频| 欧美激情 亚洲a∨综合| 中国女人做爰视频| 黄色在线成人| 成品人视频ww入口| 亚洲成人原创| 人人妻人人添人人爽欧美一区| 91久久亚洲| a在线视频观看| 国产欧美一区二区色老头| 18禁免费无码无遮挡不卡网站| 国产精品一二| 天天影视综合色| 麻豆成人av在线| 九九久久久久久| 国产成人在线免费| 国产精品熟妇一区二区三区四区| 成人综合在线观看| 国产精品无码专区| 久久人人爽爽爽人久久久| 久久丫精品忘忧草西安产品| 中文成人av在线| 欧美日韩午夜视频| 亚洲一区欧美一区| 五月激情六月丁香| 欧美在线观看视频在线| 91亚洲视频在线观看| 日韩欧美亚洲一区二区| 人妻少妇一区二区三区| 亚洲男人天堂网| 香蕉视频在线播放| 久久99久国产精品黄毛片入口| 超碰99在线| 国产精品成人播放| vam成人资源在线观看| 国产高清一区二区三区| 影视先锋久久| 国产三级中文字幕| 亚洲在线免费| 欧美大尺度做爰床戏| 国产福利一区二区三区视频 | 2019中文字幕在线| 欧洲精品久久久久毛片完整版| 999日本视频| 性人久久久久| 偷拍盗摄高潮叫床对白清晰| 影音先锋中文字幕一区| 好男人www社区| 国产盗摄一区二区三区| 国产精品毛片一区二区| 成人免费视频在线观看| 国产一级片毛片| 91精品国产综合久久精品麻豆 | 中文字幕一区二区三区在线播放| 国产乡下妇女做爰视频| 欧美三级电影网站| 色噜噜在线播放| 最近2019中文字幕第三页视频| 不卡av免费观看| 国产日韩视频在线观看| 五月国产精品| 在线观看17c| 日本va欧美va精品| 91黄色免费视频| 亚洲免费在线电影| 中文字幕一区二区三区免费看 | 亚洲伊人第一页| 欧美美乳视频| 国产精品又粗又长| 国产一区二区三区在线观看免费| 成人在线一级片| 午夜电影网亚洲视频| 国产剧情久久久| 中文在线不卡视频| 芒果视频成人app| 国产原创精品| 欧美激情综合色综合啪啪| 最近中文字幕一区二区| 久久一区二区三区国产精品| 免费毛片在线播放免费| 91麻豆精品国产91久久久久 | 九九精品在线| 日韩人妻无码精品久久久不卡| 国产一区二区免费看| 中文字幕欧美激情极品| 欧美午夜丰满在线18影院| 亚洲卡一卡二卡三| 欧美人与性动交| 成人97精品毛片免费看| 色狠狠久久av五月综合|| 老司机精品久久| 中文字幕在线观看的网站| 一区二区在线免费| jizz国产视频| 久久国产精品久久久| 91精品麻豆| 视频一区二区视频| 精品一区二区三区在线播放| 五月婷婷婷婷婷| 欧美中文字幕一区| 电影av在线| 国产欧美一区二区| 久久人体视频| 手机av在线网| 亚洲人成电影网站色mp4| 国产精品一二三四五区| 久久精品电影网站| 国产在线视频欧美一区| 在线观看污视频| 国产宾馆实践打屁股91| 国产无码精品久久久| 精品国产网站在线观看| 91福利在线尤物| 国产一级二级三级精品| 香蕉成人久久| 国产亚洲精品精品精品| 欧美日韩一区二区在线观看| 秋霞午夜在线观看| 99理论电影网| 国产手机视频一区二区| 男人舔女人下部高潮全视频| 欧美视频在线不卡| 国产精品一区二区三区视频网站| 91影院未满十八岁禁止入内| 亚洲午夜激情在线| 蜜桃精品一区二区| 欧美日韩免费不卡视频一区二区三区 | 中文字幕av无码一区二区三区| 日韩有码片在线观看| 日韩一区免费| 鲁一鲁一鲁一鲁一澡| 国产人成一区二区三区影院| 97国产精品久久久| 欧美精品成人91久久久久久久| 亚洲精品亚洲人成在线| 91人人澡人人爽人人精品| 最好看的中文字幕久久| 少妇一区二区三区四区| 国产精品69精品一区二区三区| 88国产精品视频一区二区三区| 中文字幕视频观看| 在线免费不卡视频| 91最新在线视频| 久久婷婷开心| 久久精品国产第一区二区三区| 国产一级久久久| 亚洲欧美日韩一区在线| 日韩中文在线| 中文字幕乱码人妻综合二区三区| 成人免费视频在线观看| 四虎影视在线播放| 国产日韩精品一区二区| 99精品热6080yy久久| 日本黄色免费片| 亚洲精品一区久久久久久| 久久久久久爱| 丁香婷婷激情网| 亚洲国产欧美在线| 黄色av电影在线播放| 快播亚洲色图| 懂色中文一区二区在线播放| 中文精品久久久久人妻不卡| 久久久久久综合网天天| 国产精品久久观看| 国产美女喷水视频| 精品国产一二三|