【问题标题】:ActiveMQ redelivery times per queue?每个队列的 ActiveMQ 重新传递时间?
【发布时间】:2015-01-06 00:44:48
【问题描述】:

我有 ActiveMQ 5.10.0 并将接收器和代理配置为相同: tcp://localhost:61666?jms.prefetchPolicy.queuePrefetch=0&jms.redeliveryPolicy.maximumRedeliveries=5&jms.redeliveryPolicy.initialRedeliveryDelay=5000&jms.redeliveryPolicy.useExponentialBackOff=true&jms.redeliveryPolicy.backOffMultiplier=2.0&jms.nonBlockingPolicy0=trueimRedelivery.

当队列中只有一条消息抛出异常时,按预期重新传递,在 5s、10、20、40 和 80 之后。然后将其放置在 deadletterque 上。

当多条消息被放入队列时,时间加倍,不是针对每条消息,而是针对队列。我预计最长时间为 180 秒,但消息 1 在消息 2 后 170 秒重试,下一条消息在 340 秒后重试。下一条消息是在680s之后... 我是在 ActiveMQ 中发现错误还是我的配置有误?

【问题讨论】:

    标签: activemq


    【解决方案1】:

    为了保持订单,消息会被重试并且会阻塞消费者。因此,如果您将两条“坏”消息放在队列中,第一条将重试 180 秒,然后第二条将重试 180 秒,依此类推。这是保持消息顺序的预期行为。

    【讨论】:

    • 我怀疑是不是消息顺序,首先 MQ 尝试消息 1,然后 2,然后 3,然后再 1 等等。我怎样才能禁用消息顺序?
    • @Petter,当jms.nonBlockingRedelivery 为真时,这是真的吗?我认为这就是那个 URI 选项的重点......
    • 没有。 nonBlocking 适用于重新交付,应该可以解决这个问题。啊,我现在看到它包含在 OP 的 URL 中。至少该选项在 Spring DMLC 和 Apache Camel 等衍生工具中有效。所以它应该做的工作。似乎在使用普通 MessageListener 和单个会话时它并没有真正摇摆。看起来有点依赖。
    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2022-06-14
    • 2014-12-09
    • 1970-01-01
    相关资源
    最近更新 更多