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 项目徽标是 Apache 软件基金会的商标。版权所有 © 2024,Apache 软件基金会。根据 Apache 许可证 2.0 许可。