日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MQ延迟队列实现延迟消息

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MQ延迟队列实现延迟消息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在開發中經常會遇到延時任務的需求,例如在12306購買車票,若生成訂單30分鐘未支付則自動取消;還有在線商城完成訂單后48小時不評價 ,自動5星好評。像這類在某事件觸發后一段時間內執行的需求任務我們稱之為?延時任務。

那么如何實現延遲任務呢?

第一反應是利用cron方案來實現:

啟動一個cron定時任務,每隔一段時間執行一次,比如30分鐘,找到那些超時的數據,直接更新狀態,或者拿出來執行一些操作。如果數據量比較大,需要分頁查詢,分頁update,這將是一個for循環更新操作。

cron方案是很常見的一種方案,但是常見的不一定是最好的,主要有以下幾個問題:

  • 當數據量大的時候輪詢效率低;
  • 時效性不夠好,如果每小時輪詢一次,最差的情況時間誤差會達到1小時;
  • 如果通過增加cron輪詢頻率來減少時間誤差,則會出現輪詢低效和重復計算的問題;

既然cron方案不是很理想,那就請出我們今天的主角,使用RocketMQ的延時消息解決。在創建訂單的時候發送一條延時消息到RocketMQ,30分鐘后消費者消費消息去檢查訂單的狀態,如果發現訂單未支付則取消訂單釋放庫存。

實現

RocketMQ延遲隊列的核心思路是:所有的延遲消息由producer發出之后,都會存放到同一個topic(SCHEDULE_TOPIC_XXXX)下,不同的延遲級別會對應不同的隊列序號,當延遲時間到之后,由定時線程讀取轉換為普通的消息存的真實指定的topic下,此時對于consumer端此消息才可見,從而被consumer消費。

注意:?RocketMQ不支持任意時間的延時,只支持以下幾個固定的延時等級

private String messageDelayLevel = "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h";

下面我們結合SprintBoot利用RocketMQ發送延時消息

  • 引入RocketMQ組件
<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId></dependency>
  • 增加RocketMQ的配置

rocketmq:??

????????name-server:?172.31.0.44:9876??

????????producer:????

????????group:?delay-group

  • 編寫生產者
@Component @Slf4j public?class?DelayProduce?{???@Autowired????private?RocketMQTemplate?rocketMQTemplatet;??public?void?sendDelayMessage(String?topic,String?message,int?delayLevel{???????SendResult?sendResult?=?rocketMQTemplatet.syncSend(topic,?MessageBuilder.withPayload(message).build(),?2000,?delayLevel);????????log.info("sendtime?is?{}",?DateTimeFormatter.ofPattern("yyyy年MM月dd 日?HH:mm:ss").format(LocalDateTime.now()));????????log.info("sendResult?is{}",sendResult);???? } }
  • 編寫消費者
@Slf4j@Component@RocketMQMessageListener(????????topic?=?"delay-topic",????????consumerGroup?=?"delay-group")public?class?DelayConsumer?implements?RocketMQListener<String>?{????@Override????public?void?onMessage(String?message)?{????????log.info("received?message?time?is?{}",?DateTimeFormatter.ofPattern("yyyy年MM月dd日?HH:mm:ss").format(LocalDateTime.now()));????????log.info("received?message?is?{}",message);????}}
  • 測試
@RunWith(SpringRunner.class) @SpringBootTest public?class?DelayProduceTest?{???? @Autowired???? private?DelayProduce?delayProduce;???? @Test???? public?void?sendDelayMessage()?{???????? delayProduce.sendDelayMessage("delay-topic","Hello,JAVA日知錄",5);???? }}

這里delayLevel設置成5,對應RocketMQ的延時等級就是1分鐘后投遞消息。

  • 運行結果

發送時間

消費時間

修改延時級別

RocketMQ的延遲等級可以進行修改,以滿足自己的業務需求,可以修改/添加新的level。例如:你想支持1天的延遲,修改最后一個level的值為1d,這個時候依然是18個level;也可以增加一個1d,這個時候總共就有19個level。

  • 打開RocketMQ的配置文件,修改messageDelayLevel?屬性

brokerClusterName = DefaultClusterbrokerName = broker-abrokerId = 0deleteWhen = 04fileReservedTime = 48brokerRole = ASYNC_MASTERflushDiskType = ASYNC_FLUSHstorePathRootDir = /app/rocketmq/datamessageDelayLevel=90s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h

這次將延時等級1修改成了90s,生產者發送消息后需要90s后再進行消息投遞。修改完成后重啟RocketMQ。

nohup sh mqbroker -n localhost:9876 -c ../conf/broker.conf &

  • 使用延時等級1發送消息

public?void?sendDelayMessage()?{?delayProduce.sendDelayMessage("delay-topic","Hello,JAVA日知錄",1);}

  • 測試

發送時間

消費時間

通過比對發送時間與消費時間證明延時等級修改生效。

總結

以上是生活随笔為你收集整理的MQ延迟队列实现延迟消息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲成a人片777777久久 | 野外一级片 | 男生c女生 | www.youjizz.com视频| 欧美性生交片4 | 亚洲成av人在线观看 | x88av视频| 手机看片国产1024 | 婷婷91 | 在线免费观看av网址 | 天天舔日日操 | 色偷偷影院| 国产suv精品一区二区三区 | 午夜88 | 欧美裸体网站 | 污视频网站在线 | 男ji大巴进入女人视频 | 亚洲国产v| 4虎最新网址 | 国产精品破处 | 9.1在线观看免费 | 免费看黄在线观看 | 国产成人无码av在线播放dvd | 狠狠躁夜夜躁av无码中文幕 | 久久九九国产精品 | av一区在线观看 | 成人精品福利视频 | www.久久成人 | 欧美精品中文 | 亚洲天天操 | 男人视频网 | 黄色高清无遮挡 | 黄色在线观看网站 | 天天谢天天干 | 国产激情网址 | 加勒比在线免费视频 | 性欧美bb| 鲁鲁狠狠狠7777一区二区 | 18禁超污无遮挡无码免费游戏 | 国产成人午夜精品无码区久久 | 91久久精品一区二区 | 青草视屏 | 成人wwwww免费观看 | 欧美另类极品videosbest使用方法 | 91丨国产丨捆绑调教 | 国产三级精品三级 | av性天堂网| 久久五月天婷婷 | 伊人网站在线观看 | 精品一区二区三区蜜桃 | 亚洲精品一级片 | 国产精品无圣光 | 免费看的av | 免费av福利 | 久久久久久久久久一区二区 | 亚洲一二三区视频 | 精品三级av | www午夜视频| 色综合视频网 | 男人的天堂日韩 | 欧美日韩性生活视频 | 成人靠逼视频 | 青娱乐国产在线视频 | 久久看av| 国产色综合天天综合网 | 午夜91 | 国产精品毛片一区二区三区 | 精品国产欧美日韩 | 午夜嘿嘿嘿 | 日本在线视频不卡 | 日韩一级视频在线观看 | 国产v亚洲v天堂无码久久久 | 日本一本在线观看 | 最好看的电影2019中文字幕 | 蜜桃av网站 | 97香蕉碰碰人妻国产欧美 | 手机在线不卡av | 久久在线电影 | 视频在线播 | 色综合久久久无码中文字幕波多 | 亚洲免费毛片 | 丰满熟妇被猛烈进入高清片 | 日韩少妇裸体做爰视频 | 十大污视频 | 日韩国产一区 | 免费大片黄在线观看视频网站 | 欧美com| 亚州av网| 嫩草影院在线观看视频 | 免费国产一区 | 国产精品入口 | 亚洲一区中文字幕永久在线 | 欧美激情三级 | 色网站免费观看 | 日韩精品一区二区三区 | 久久成人一区二区 | 一二三区在线播放 | 日本黄色片在线播放 | 特黄做受又粗又大又硬老头 |