如何确保在骆驼上下文轮询 weblogic jms 队列中排序

How to ensure ordering in camel context polling weblogic jms queue

我正在尝试设置一个 camel 上下文来轮询 weblogic jms 队列,使用消息并将其发送到 web 服务端点。如果交易出现任何错误或目标系统不可用,我需要重新发送相同的消息而不丢失 sequence/ordering.

我已经根据 https://camel.apache.org/transactional-client.html 设置了具有单个消费者的骆驼 jms 路由并启用了事务处理属性,并将重新投递设置为无限制。

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

事务客户端用于保证在重新投递时应用关闭时消息不丢失。

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

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

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

听起来消息是 "put aside" 内部发送的,以便稍后重新发送。这绝对可以避免阻塞消息处理。

您可以在 Weblogic 上配置类似 "redelivery delay" 的设置吗?我可以想象延迟的重新交付就像一个带有预定消费者的内部错误队列。