Apache ActiveMQ™ -- Stomp 延迟和计划消息功能
此文档仅适用于 Stomp 客户端连接到 ActiveMQ Broker v5.4 及更高版本。
ActiveMQ 从 5.4 版本开始,在 ActiveMQ 消息代理中内置了一个可选的持久调度程序。通过在 xml 配置 中将代理 schedulerSupport 属性设置为 true 来启用它。
ActiveMQ 客户端可以使用以下消息属性利用延迟传递
属性名称 | 类型 | 描述 |
---|---|---|
AMQ_SCHEDULED_DELAY |
长整型 | 消息在被代理调度传递之前等待的时间(毫秒) |
AMQ_SCHEDULED_PERIOD |
长整型 | 消息在开始时间之后等待再次调度的时间(毫秒) |
AMQ_SCHEDULED_REPEAT |
整型 | 重复调度消息传递的次数 |
AMQ_SCHEDULED_CRON |
字符串 | 使用 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 次,每次消息之间延迟 1 秒 - 并且您希望每小时发生一次 - 您可以这样做
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);