欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

RocketMQ-延遲消息的處理流程介紹

 更新時間:2021年07月03日 09:30:01   作者:pigcoffee  
這篇文章主要介紹了RocketMQ-延遲消息的處理流程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

概述

RocketMQ 支持發(fā)送延遲消息,但不支持任意時間的延遲消息的設(shè)置,僅支持內(nèi)置預(yù)設(shè)值的延遲時間間隔的延遲消息;

預(yù)設(shè)值的延遲時間間隔為:

1s、 5s、 10s、 30s、 1m、 2m、 3m、 4m、 5m、 6m、 7m、 8m、 9m、 10m、 20m、 30m、 1h、 2h;

在消息創(chuàng)建的時候,調(diào)用 setDelayTimeLevel(int level) 方法設(shè)置延遲時間;

broker在接收到延遲消息的時候會把對應(yīng)延遲級別的消息先存儲到對應(yīng)的延遲隊列中,等延遲消息時間到達(dá)時,會把消息重新存儲到對應(yīng)的topic的queue里面。

Broker處理延遲消息

CommitLog.putMessage()

//獲取消息的sysflag
        final int tranType = MessageSysFlag.getTransactionValue(msg.getSysFlag());
        //非事務(wù)消息 或 已commit事務(wù)消息
        if (tranType == MessageSysFlag.TRANSACTION_NOT_TYPE
            || tranType == MessageSysFlag.TRANSACTION_COMMIT_TYPE) {
            // Delay Delivery 判斷消息是否設(shè)置延遲
            if (msg.getDelayTimeLevel() > 0) {
                //判斷延遲級別是否大于最大級別,如果大于最大值,則將延遲級別設(shè)置為最大級
                if (msg.getDelayTimeLevel() > this.defaultMessageStore.getScheduleMessageService().getMaxDelayLevel()) {
                    msg.setDelayTimeLevel(this.defaultMessageStore.getScheduleMessageService().getMaxDelayLevel());
                }
                //延遲消息的topic為 SCHEDULE_TOPIC_XXXX
                topic = ScheduleMessageService.SCHEDULE_TOPIC;
                //獲取延遲級別,一個延遲級別對應(yīng)一個Queue
                queueId = ScheduleMessageService.delayLevel2QueueId(msg.getDelayTimeLevel());
 
                // Backup real topic, queueId
                //消息原始的topic,queueid保存到消息的property中
                MessageAccessor.putProperty(msg, MessageConst.PROPERTY_REAL_TOPIC, msg.getTopic());
                MessageAccessor.putProperty(msg, MessageConst.PROPERTY_REAL_QUEUE_ID, String.valueOf(msg.getQueueId()));
                msg.setPropertiesString(MessageDecoder.messageProperties2String(msg.getProperties()));
 
                msg.setTopic(topic);
                msg.setQueueId(queueId);
            }
        }

1、判斷消息類型,如果是非事務(wù)消息、已commit事務(wù)消息,才能處理延遲消息

2、判斷消息是否設(shè)置延遲級別,如果延遲級別大于0,則該消息為延遲消息

3、判斷延遲級別是否大于最大級別,如果大于最大值,則將延遲級別設(shè)置為最大級

4、延遲消息的topic為 SCHEDULE_TOPIC_XXXX

5、獲取延遲級別,一個延遲級別對應(yīng)一個Queue

6、消息原始的topic,queueid保存到消息的property中

7、修改消息的topci、queueid

啟動延遲消息定時任務(wù)

ScheduleMessageService.start()

延遲消息投遞

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中equals方法使用及重寫練習(xí)

    Java中equals方法使用及重寫練習(xí)

    equals是在object類中的方法,在object中equals是用來看看兩個參數(shù)是否引用的是同一個對象,下面這篇文章主要給大家介紹了關(guān)于Java中equals方法使用及重寫練習(xí)的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • IDEA中設(shè)置Tab健為4個空格的方法

    IDEA中設(shè)置Tab健為4個空格的方法

    這篇文章給大家介紹了代碼縮進(jìn)用空格還是Tab?(IDEA中設(shè)置Tab健為4個空格)的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-03-03
  • java保留小數(shù)的四種實現(xiàn)方法

    java保留小數(shù)的四種實現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了java保留小數(shù)的四種實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 詳解Java線程池的增長過程

    詳解Java線程池的增長過程

    在本篇文章里小編給大家整理的是關(guān)于Java線程池的增長過程以及相關(guān)知識點,需要的朋友們可以參考下。
    2019-08-08
  • java實現(xiàn)抖音代碼舞源碼

    java實現(xiàn)抖音代碼舞源碼

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)抖音代碼舞的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Java調(diào)用echarts提供的地圖壓縮方法來壓縮地圖

    Java調(diào)用echarts提供的地圖壓縮方法來壓縮地圖

    今天小編就為大家分享一篇關(guān)于Java調(diào)用echarts提供的地圖壓縮方法來壓縮地圖,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 淺析Java中JSONObject和JSONArray使用

    淺析Java中JSONObject和JSONArray使用

    這篇文章主要介紹了Java中JSONObject和JSONArray使用的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • SpringMVC的Dispatcher解讀

    SpringMVC的Dispatcher解讀

    這篇文章主要介紹了SpringMVC的Dispatcher用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • JAVA中阻止類的繼承(官方和非官方)

    JAVA中阻止類的繼承(官方和非官方)

    在面向?qū)ο蟮睦碚撝? 有一些方案要求你用一個辦法來聲明一個不可繼承的類。一般而言,如果類提供的功能不應(yīng)該被改變,或者更恰當(dāng)?shù)恼f,是被覆蓋(override)的時候才會出現(xiàn)這種情況。在這篇文章里,我討論在JAVA語言中的實現(xiàn)辦法--官方和非官方的辦法
    2014-01-01
  • Spring中@DependsOn注解的使用代碼實例

    Spring中@DependsOn注解的使用代碼實例

    這篇文章主要介紹了Spring中@DependsOn注解的使用代碼實例,Spring中@DependsOn,主要是使用在類和方法上, 作用是當(dāng)前對象要依賴另外一些對象,被依賴的對象會先注冊到Spring的IOC容器中,需要的朋友可以參考下
    2024-01-01

最新評論