NMS.ActiveMQ 延遲與排程訊息功能

5.4 版本開始,ActiveMQ 內建了一個可選的持久排程器到 ActiveMQ 訊息代理中。它透過在 xml 配置中將代理的 schedulerSupport 屬性設定為 true 來啟用。

ActiveMQ 客戶端可以透過使用以下訊息屬性來利用延遲傳遞

屬性名稱 類型 描述
AMQ_SCHEDULED_DELAY long 訊息在被排程由代理傳遞之前將等待的毫秒數
AMQ_SCHEDULED_PERIOD long 在開始時間之後等待以再次排程訊息的毫秒數
AMQ_SCHEDULED_REPEAT int 重複排程訊息以進行傳遞的次數
AMQ_SCHEDULED_CRON String 使用 Cron 項目來設定排程

例如,要讓訊息排程在 60 秒後傳遞 - 您需要設定 AMQ_SCHEDULED_DELAY 屬性

    IMessageProducer producer = session.CreateProducer(destination);
    ITextMessage message = session.CreateTextMessage("test msg");
    long time = 60 * 1000;
    message.Properties\["AMQ\_SCHEDULED\_DELAY"\] = time;
    producer.Send(message);

您可以設定訊息以初始延遲等待,並重複傳遞 10 次,每次重新傳遞之間等待 10 秒

    IMessageProducer producer = session.CreateProducer(destination);
    ITextMessage message = session.CreateTextMessage("test msg");
    long delay = 30 * 1000;
    long period = 10 * 1000;
    int repeat = 9;
    message.Properties\["AMQ\_SCHEDULED\_DELAY"\] = delay;
    message.Properties\["AMQ\_SCHEDULED\_PERIOD"\] = period;
    message.Properties\["AMQ\_SCHEDULED\_REPEAT"\] = repeat;
    producer.Send(message);

您也可以使用 CRON 來排程訊息,例如,如果您希望訊息排程每小時傳遞一次,您需要將 CRON 項目設定為 - 0 * * * * - 例如

    IMessageProducer producer = session.CreateProducer(destination);
    ITextMessage message = session.CreateTextMessage("test msg");
    message.Properties\["AMQ\_SCHEDULED\_CRON"\] = "0 * * * *";
    producer.Send(message);

CRON 排程優先於使用訊息延遲 - 但是,如果使用 CRON 項目設定了重複和週期,ActiveMQ 排程器將在每次 CRON 項目觸發時排程訊息的傳遞。用一個例子更容易解釋。假設您希望訊息傳遞 10 次,每次訊息之間間隔一秒 - 並且您希望每小時發生一次 - 您可以這樣做

    IMessageProducer producer = session.CreateProducer(destination);
    ITextMessage message = session.CreateTextMessage("test msg");
    message.Properties\["AMQ\_SCHEDULED\_CRON"\] = "0 * * * *";
    message.Properties\["AMQ\_SCHEDULED\_DELAY"\] = 1000;
    message.Properties\["AMQ\_SCHEDULED\_PERIOD"\] = 1000;
    message.Properties\["AMQ\_SCHEDULED\_REPEAT"\] = 9;
    producer.Send(message);

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛標誌和 Apache ActiveMQ 項目標誌是 The Apache Software Foundation 的商標。版權所有 © 2024,The Apache Software Foundation。根據 Apache License 2.0 授權。