【问题标题】:AMQP redelivery policyAMQP 重新投递政策
【发布时间】:2021-04-24 02:34:08
【问题描述】:

我将 Apache Camel AMQP 组件与 Azure 服务总线一起使用。我想为 ActiveMQ 添加重新交付策略:

private void addRedeliveryPolicy(ActiveMQConnectionFactory factory) {
    RedeliveryPolicy policy = factory.getRedeliveryPolicy();
    policy.setMaximumRedeliveries(5);
    policy.setMaximumRedeliveryDelay(10000);
    policy.setInitialRedeliveryDelay(10);
    policy.setRedeliveryDelay(30);
}

如果 AMQPComponent 在重新交付策略中存在单个 getter:

private void addRedeliveryPolicy(JmsConnectionFactory factory) {
    JmsRedeliveryPolicy defaultCallbackRedeliveryPolicy = factory.getRedeliveryPolicy();
    factory.getRedeliveryPolicy().getMaxRedeliveries(...);
}

使用标准 AMQP 和 Qpid 库。问题-如何将redelivery features设置为:redeliveryDalay,redeliveryAttempts,对于AMQP组件?

【问题讨论】:

    标签: java apache-camel jms amqp


    【解决方案1】:

    Camel 的 ActiveMQ 组件使用特定于 ActiveMQ 的 OpenWire JMS 客户端实现。它使用非标准化的 OpenWire 协议。它实现了特定的基于客户端的通过其RedeliveryPolicy 对象配置的重新传递功能。

    Camel 的 AMQP 组件使用 Qpid AMQP 客户端,该客户端可以与任何 AMQP 代理、客户端、路由器等进行互操作,并且必须遵守 AMQP 规范。它有一个接口(即JmsRedeliveryPolicy),你显然必须实现它来配置重新传递。见this example。实施您的策略后,只需在您的 JmsConnectionFactory 上调用 setRedeliveryPolicy()

    这里要记住的主要一点是,这两个实现是 100% 独立的,因此您可以在其中一个上配置的内容不一定在另一个上可用。目前,ActiveMQ 5.x RedeliveryPolicy 比 Qpid JmsRedeliveryPolicy 有更多的选项。

    请记住,在许多(如果不是大多数)情况下,可以在 broker 上配置复杂的重新交付语义,因此如果您想要的配置元素在 Qpid 的 JmsRedeliveryPolicy 上不可用,我建议您可以查看您正在使用的任何经纪人,因为您可能会在那里找到等效的选项。

    【讨论】:

    • @jbertram,您对如何使用 redeliveryDalays、尝试等配置 JmsRedeliveryPolicy 有什么建议吗?
    • 我更新了我的答案以解决您的 cmets。
    • @jbertram,谢谢。换句话说,我的问题是:不可能。
    【解决方案2】:

    AMQP JMS 客户端不支持与 Openwire JMS 客户端相同的配置选项。其主要原因是,与 Openwire 客户端不同,重新传递不会在 AMQP JMS 客户端本地发生,而是将消息释放回代理以进行重新调度。这意味着任何延迟处理或其他机制都需要在代理端而不是客户端完成。

    客户端中当前唯一的选项是最大重新传递选项,该选项基于作为消息传输的一部分跟踪的 AMQP 传递计数而应用。

    【讨论】:

    • 据我了解,ActiveMQ 代理 (OpenwireJMS) 重新交付不会在客户端本地发生。当交易的消费者消息应该被重新传递时,它会返回到带有标记的队列(代理) - redeliveryActivated。然后通过 redeliveryPolicy 再次消费
    • 作为 ActiveMQ 代理的开发者之一,我可以说你的理解是有缺陷的。客户端重新传递是本地的,直到达到 maxRedeliveries 值,然后通过 PoisonAck 返回消息,然后代理重新传递开始
    猜你喜欢
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2019-02-10
    • 1970-01-01
    • 2021-12-05
    • 2017-01-05
    相关资源
    最近更新 更多