积极的Mq交付政策

时间:2011-11-17 12:08:17

标签: activemq

你能告诉我这个功能的含义,他们做了什么?我试图在Google上找到它,但我无法理解。

我正在设置重新投放政策。

policy.setBackOffMultiplier(2);
    policy.setUseExponentialBackOff(true);
    policy.setMaximumRedeliveries(2);
    policy.setRedeliveryDelay(5000)

2 个答案:

答案 0 :(得分:3)

发生以下任何情况时,会将邮件重新传递给客户端:

  • 使用事务会话并调用rollback()。
  • 在调用提交之前关闭事务会话。
  • 会话正在使用CLIENT_ACKNOWLEDGE并调用Session.recover()。

一旦消息的重新传递尝试超过为重新传递策略配置的maximumRedeliveries,“Poison ack”将被发送回经纪人,让他知道该消息被视为毒丸。然后,代理接收消息并将其发送到死信队列,以便稍后进行分析。

您可以在此处阅读有关Active MQ中消息重新传递处理的更多信息:

http://activemq.apache.org/message-redelivery-and-dlq-handling.html

您所指的重新传递政策属性是:

  • maximumRedeliveries:设置消息在被视为中毒药丸之前重新传送的最大次数,并返回到代理,以便它可以转到死信队列(使用值-1来定义无限次重新传送)< / LI>
  • maximumRedeliveryDelay:设置在设置useExponentialBackOff选项时将应用的最大传递延迟。 (使用值-1来定义不应用最大值)(v5.5)
  • useExponentialBackOff:应使用指数退避(即以指数方式增加超时)
  • backOffMultiplier:回退乘数

此处描述了重新传递政策的所有属性:

http://activemq.apache.org/redelivery-policy.html

答案 1 :(得分:0)

几点可以添加到上面提到的那些

  1. 如果您使用CLIENT_ACK作为确认模式并关闭会话而未确认最新消息,则将重新传递所有待处理消息。
  2. 如果您正在使用异步消息传输并且在RuntimeException方法中抛出onMessage(),则将重新传递相应的消息。
  3. 以上所有内容都会受到最大程度的重新尝试。在最大重新传递尝试之后,消息将转到死信息队列(如果已配置)或将被简单地删除。

    您所问的是一种重新发送政策。因此,如果必须重新传递一条消息,那么它的重新传递应该给予多少重要性(延迟)。如果为每次重新传递相同的邮件设置setUseExponentialBackOff,则传递延迟将呈指数级增长。

    可用于重新投放政策的所有属性均为

    enter image description here

    有关完整的详细信息,请查看here