【问题标题】:active Mq delivery policy主动 Mq 交付策略
【发布时间】:2014-05-11 23:11:58
【问题描述】:

你能告诉我这个函数的含义,它们是做什么的吗?我试图在谷歌上找到它,但我无法理解。

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

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

【问题讨论】:

    标签: activemq


    【解决方案1】:

    当发生以下任何情况时,消息将重新传递给客户端:

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

    一旦消息的重新传递尝试超过了为重新传递策略配置的最大重新传递次数,就会向代理发送回“毒药确认”,让他知道该消息被视为毒丸。然后,Broker 接收消息并将其发送到死信队列,以便稍后对其进行分析。

    您可以在此处阅读有关 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

    【讨论】:

    • 帖子中没有内容的链接不被视为答案。您能否将一些相关信息复制到您的答案中,以防止链接依赖?
    • 我要描述,这个链接没关系
    • 好点,我对此有点新,我已经用更多信息更新了答案
    【解决方案2】:

    上面提到的几点要补充

    1. 如果您使用 CLIENT_ACK 作为确认模式并在未确认最新消息的情况下关闭会话,则将重新传递所有待处理的消息。
    2. 如果您使用异步消息传输并且在onMessage() 方法中抛出了RuntimeException,则将重新传递相应的消息。

    当然,以上所有内容都需要进行最大的重新投递尝试。在最大重新传递尝试后,消息将进入死消息队列(如果您已配置)或将被简单地丢弃。

    您所询问的是一种重新投递政策。因此,如果必须重新传递一条消息,那么应该对它的重新传递赋予多少重要性(延迟)。如果设置了 setUseExponentialBackOff 为每次重新投递相同的消息传递延迟将成倍增加。

    所有可用于重新交付政策的属性是

    如需了解完整详情,请查看here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      相关资源
      最近更新 更多