【问题标题】:How to ensure ordering in camel context polling weblogic jms queue如何确保在骆驼上下文轮询weblogic jms队列中排序
【发布时间】:2019-10-28 13:31:31
【问题描述】:

我正在尝试设置轮询 weblogic jms 队列、使用消息并将其发送到 web 服务端点的骆驼上下文。万一事务中发生任何错误或目标系统不可用,我需要重新传递相同的消息而不会丢失序列/排序。

我已经建立了一个单一消费者的骆驼 jms 路线,并根据https://camel.apache.org/transactional-client.html 启用了交易属性,并将重新交付设置为无限制。

当事务使用 messageA 失败时,来自 weblogic 队列的 jms 消息消费被回滚,并且在 weblogic 中将 messageA 标记为重新传递(状态字符串标记为延迟)。但在此期间,如果另一条消息到达 weblogic 队列,骆驼路由会选择 messageB 并将其转发到目标端点,尽管 messageA 仍处于重试模式。这会扭曲消息的整个顺序。

事务客户端用于确保在重新交付期间关闭应用程序时消息不会丢失。

我希望没有消息丢失,并且消息始终按照生成到 weblogic 队列中的正确顺序发送到目标端点。

【问题讨论】:

    标签: apache-camel jms weblogic


    【解决方案1】:

    新到达的消息超过了必须重新传递的现有消息,这听起来像是代理 (Weblogic) 问题或功能。

    我从未在 ActiveMQ 中看到过这种行为。重新传递的失败消息由 Apache 代理立即重新传递。

    听起来该消息在内部“搁置一旁”,以便稍后重新发送。这对于避免阻塞消息处理绝对有意义。

    您可以配置在 Weblogic 上设置的“重新传递延迟”之类的东西吗?我可以想象延迟重新交付就像一个带有预定消费者的内部错误队列。

    【讨论】:

    • 谢谢。我错过了。 Weblogic 将消息标记为延迟,并且将下一条消息标记为可以传递。骆驼是否有任何选项可以确保有序交付并防止服务器停机时消息丢失。
    • 你已经消费transacted,所以一定不会有消息丢失。 Camel Resequencer 可以修复混淆的消息顺序。然而,这是基于批次或(通常很小的)时间窗口。基本上,如果您的“卡住消息”的最大延迟为一天,并且您想在处理期间修复订单,则您必须延迟每条消息一天以保证订单。
    猜你喜欢
    • 2017-11-08
    • 1970-01-01
    • 2016-12-17
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 2012-11-10
    • 2014-04-26
    相关资源
    最近更新 更多