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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

for循环延时_RocketMQ进阶-延时消息

發布時間:2024/9/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 for循环延时_RocketMQ进阶-延时消息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

在開發中經常會遇到延時任務的需求,例如在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:9876producer:group: delay-group
  • 編寫生產者
@Component @Slf4j public class DelayProduce {@Autowiredprivate 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> {@Overridepublic 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 {@Autowiredprivate DelayProduce delayProduce;@Testpublic 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 = DefaultCluster brokerName = broker-a brokerId = 0 deleteWhen = 04 fileReservedTime = 48 brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH storePathRootDir = /app/rocketmq/data messageDelayLevel=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); }
  • 測試

發送時間

消費時間

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

RocketMQ 相關文章
  • RocketMQ 入門基礎 - 環境 & 整合
  • RocketMQ進階-事務消息

總結

以上是生活随笔為你收集整理的for循环延时_RocketMQ进阶-延时消息的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日韩视频一区二区三区四区 | 蜜桃av网站 | 懂色aⅴ一区二区三区免费 国产精品99在线观看 | 毛片入口 | 日批视频免费 | 欧美日韩精品中文字幕 | 欧美老女人性生活视频 | 中文字幕在线观看线人 | 精品免费 | 亚洲av无一区二区三区久久 | 欧美日韩tv | 亚洲乱码中文字幕 | 久久久久久国产精品三级玉女聊斋 | 成人看片泡妞 | 黄色免费视频网站 | 亚洲欧美一区二区三区在线观看 | 最污网站在线观看 | 国产偷啪| 午夜剧场福利社 | 国产乱码精品1区2区3区 | 亚洲欧洲精品成人久久奇米网 | 亚洲综合第一 | 成了校长的性脔h文 | 国产美女黄色片 | 日女人免费视频 | 成人无码视频 | 一卡二卡在线视频 | 欧美一级黄色录像 | 成人做受黄大片 | 色综合久久88色综合天天6 | 国产亚洲精品成人 | 天天干天天草天天射 | 久久综合狠狠综合久久综合88 | 日本在线一级片 | 亚洲无人区小视频 | 日韩一区二区三区免费视频 | 成人精品黄段子 | 欧美一区 | 18禁裸乳无遮挡啪啪无码免费 | 亚洲国产精品视频在线观看 | 尤物国产 | 老司机狠狠爱 | 亚洲成人系列 | 国产精品熟妇人妻g奶一区 a少妇 | 亚洲视频精品在线观看 | 青青视频免费在线观看 | 成人黄性视频 | 亚洲 国产 日韩 欧美 | 日韩综合在线视频 | 五月色婷 | 日日夜夜噜噜噜 | 粉嫩av国产一区二区三区 | 国内av自拍| 麻豆国产一区二区三区 | 精品久久免费视频 | 亚洲欧美日韩色 | 日本黄色三级网站 | 日本福利社 | 91视频网址| 黑人操白妞 | 日日夜夜爱 | 精品一区二区久久久久久久网站 | 成人免费一区二区三区 | 欧美色插 | 捆绑japanhdxxxxvideos | 天堂资源站 | 五月天91| 欧美大胆a视频 | 国产精品伦一区二区三级古装电影 | 五月婷婷综合久久 | 青青草亚洲 | 天天摸天天| 丁香花完整视频在线观看 | 日韩性高潮 | 黑人粗进入欧美aaaaa | 国产成人午夜高潮毛片 | julia中文字幕在线 | 香蕉视频在线网站 | 久久男人av | 成人av免费在线看 | 热久久这里只有精品 | 99精品国产免费 | 久久久久亚洲av片无码 | 国产中文字幕一区二区三区 | 一区二区三区四区五区视频 | 亚洲在线成人 | 四虎av影院| 亚欧三级 | 四虎影院在线 | 亚洲熟女综合色一区二区三区 | 黄色aaaa| 国产三级免费观看 | 亚色视频在线观看 | 97成人人妻一区二区三区 | 免费在线黄 | 人妻体体内射精一区二区 | 九九热在线观看视频 | 中文字幕有码视频 | 中文字幕国产一区 |