日韩性视频-久久久蜜桃-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进阶-延时消息的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 美女伦理水蜜桃4 | 九七影院在线观看免费观看电视 | 99精品福利视频 | 久久久久亚洲AV成人无码国产 | 91热精品 | 日韩精品在线观看一区二区三区 | 欧美日韩一二三四 | 色婷婷av一区二区三区gif | www黄色网址 | 亚洲砖区区免费 | 欧美蜜臀| 国产黄色一区二区 | 污漫在线观看 | 日韩精品一区三区 | 国产综合欧美 | 白丝av| 日韩一级片免费在线观看 | 99免费在线 | 精品视频免费在线观看 | 亚洲天堂成人在线 | 日本欧美一级 | av播放网站 | av性在线| 一区三区视频 | 久久av导航 | 免费啪| 色涩涩 | 成人做爰69片免费看 | 艳妇臀荡乳欲伦交换在线播放 | 国产精品电影在线观看 | 伊人影院网| 久久精品网 | 免费av影片 | 欧美激情图片 | 超碰免费在线 | 国产91香蕉 | 国产对白videos麻豆高潮 | 久久久亚洲一区二区三区 | 国产精品成人99一区无码 | 在线看的免费网站 | 久精品在线观看 | 九七电影院97理论片 | 亚洲av首页在线 | 天天干天天色 | 强伦人妻一区二区三区视频18 | 久久亚洲视频 | 欧美一性一交 | 美女四肢被绑在床扒衣 | 国产亚洲制服 | 国产成人亚洲精品 | 天天干天天色天天射 | 91情侣在线 | 伊人超碰在线 | 琪琪色视频 | 美女少妇毛片 | 中文字幕网站在线观看 | 一本色道久久hezyo无码 | 亚洲精品一区在线 | 青青草视频免费 | va在线看| 国产精品一区二区三区四区在线观看 | 日韩美女啪啪 | 婷婷丁香一区二区三区 | 午夜视频免费看 | 最新毛片基地 | 中文字幕不卡av | 天天色官网 | 国产成人在线精品 | 亚洲吧| 一区二区精品在线观看 | 一区二区三区日 | 国产美女免费看 | 欧美成人一二三区 | 亚洲国产成人精品视频 | 小香蕉影院 | 亚洲人成电影在线播放 | av免费观看在线 | 亚洲资源在线播放 | 91精品久| 精品国产乱码久久久久久108 | 草比视频在线观看 | 国产日韩欧美一区 | 欧美一级视频免费观看 | 色爽爽爽| 在线精品一区 | 亚洲精品xxxxx | 少妇激情偷人三级 | 18禁免费观看网站 | 精品99在线 | 久久国产影院 | 99精品久久久久久中文字幕 | 狼人av在线| 亚洲一区二区三区四区视频 | 天堂8在线| 极品探花在线播放 | 亚洲国产中文在线 | 婷婷综合一区 | 亚洲欧美在线综合 | 狠狠干香蕉 |