2011-11-17 84 views
0

你能告诉我这个函数的含义,他们做什么?我试图在Google上找到它,但我无法理解。active Mq delivery policy

我正在设置重新交付政策。当任何下列情况发生

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

回答

3

消息被重新传递给客户端:

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

一旦邮件的重新传递尝试超过为重新传送策略配置的最大重新收件人数,“毒药确认”将被发回给经纪人,让他知道邮件被认为是毒丸。然后经纪人将信息发送给死信队列,以便稍后进行分析。

你可以在这里阅读更多有关消息交还处理在Active MQ:

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

的你是指重新投递策略属性是:

  • maximumRedeliveries:设置的最大数量一次消息将被重新发送,然后它被认为是毒药,并返回给经纪人,因此它可以进入死信队列(使用值-1来定义无限数量的重新传送)
  • maximumRedeliveryDelay:设置在设置useExponentialBackOff选项时将应用的最大传送延迟。 (使用价值-1来定义没有最大被施加)(V5.5)
  • useExponentialBackOff:应该指数可使用回退(即成倍增加超时)
  • backOffMultiplier:回退乘法器

的再分发政策的所有属性描述如下:

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

+0

在帖子中没有内容的链接不被视为答案。您能否将一些相关信息复制到您的答案中,以防止链接依赖性? – Nightfirecat

+0

我想要说明,这个链接没有太大的问题 –

+1

好点,我有点新的,我已经更新了答案,更多的信息 –

0

几点添加到上述

提到的那些
  1. 如果您使用CLIENT_ACK作为确认模式,并在不确认最新消息的情况下关闭会话,则所有待处理的消息将被重新发送。
  2. 如果您使用的是异步消息传输,并且在onMessage()方法中引入了RuntimeException,则将重新传递相应的消息。

以上所有内容均经过最大限度的重新递送尝试。在最大重新传送尝试后,消息将进入死信息队列(如果已配置)或将被简单地删除。

你问的是一种重新交付政策。因此,如果消息必须重新传递,应该给予重新传递多少重要性(延迟)。如果setUseExponentialBackOff设置为每次重新发送相同的消息传递延迟将呈指数增长。

所有可用的重新传递策略的属性是

enter image description here

完整的细节看here