You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ActiveMQ Artemis中实现消息延迟10秒投递?

ActiveMQ Artemis实现消息投递前10秒延迟的方案

完全可以实现消息投递到消费者前延迟10秒的需求,下面是两种常用的实现方式:

1. 单消息层面设置延迟

发送消息时,通过JMS属性给特定消息设置延迟时间。在Web服务器的JMS客户端代码中,给消息添加AMQ_SCHEDULED_DELAY属性,值设为10000(单位毫秒):

Message message = session.createTextMessage("你的消息内容");
message.setLongProperty("AMQ_SCHEDULED_DELAY", 10000);
producer.send(message);

这种方式适合仅需给部分特定消息添加延迟的场景。

2. 全局/队列层面配置默认延迟

如果希望所有发送到目标队列的消息都默认延迟10秒,可以修改broker.xml的address-settings配置,添加<default-delay>节点。

比如针对全局所有地址/队列设置,修改你现有的配置:

<address-settings>
  <address-setting match="#">
    <dead-letter-address>DLQ</dead-letter-address>
    <expiry-address>ExpiryQueue</expiry-address>
    <redelivery-delay>0</redelivery-delay>
    <default-delay>10000</default-delay> <!-- 添加这行,指定10秒默认延迟 -->
    <auto-create-dead-letter-resources>true</auto-create-dead-letter-resources>
    <max-size-bytes>-1</max-size-bytes>
    <message-counter-history-day-limit>10</message-counter-history-day-limit>
    <address-full-policy>PAGE</address-full-policy>
    <auto-create-queues>true</auto-create-queues>
    <auto-create-addresses>true</auto-create-addresses>
    <auto-create-jms-queues>true</auto-create-jms-queues>
    <auto-create-jms-topics>true</auto-create-jms-topics>
    <auto-delete-queues>false</auto-delete-queues>
    <auto-delete-addresses>false</auto-delete-addresses>
    <auto-delete-jms-queues>false</auto-delete-jms-queues>
    <auto-delete-jms-topics>false</auto-delete-jms-topics>
    <expiry-delay>60000</expiry-delay>
  </address-setting>
</address-settings>

若只想给某个特定队列设置延迟,把match="#"改成match="你的队列名称"即可,这样只有匹配的队列会应用该延迟规则。

注意:延迟时间从消息成功到达Broker的时间开始计算,到Broker允许将消息投递给消费者的时间间隔,确保Broker时间同步即可保证延迟精度。

内容的提问来源于stack exchange,提问作者Albaasith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:57:11