我正在尝试设置一个骆驼上下文,该上下文轮询一个weblogic jms队列,使用该消息并将其发送到一个Webservice端点。如果交易中发生任何错误或目标系统不可用,我需要重新传递相同的消息而不会丢失顺序/顺序。
我已经建立了一个由单个消费者使用的骆驼jms路由,并根据https://camel.apache.org/transactional-client.html启用了事务处理属性,并将重新交付设置为无限制。
当事务因messageA而失败时,将回滚weblogic队列中的jms消息消耗,并在weblogic中将messageA标记为重新交付(状态字符串标记为延迟)。但是在这段时间内,如果另一个消息到达了weblogic队列,则骆驼路由会选择messageB并将其转发到目标端点,尽管messageA仍处于重试模式。这会扭曲消息的整个顺序。
事务客户端用于确保在重新交付期间关闭应用程序时消息不会丢失。
我希望没有消息丢失,并且消息总是按照生成到weblogic队列中的正确顺序发送到目标端点。
答案 0 :(得分:1)
新到达的消息超过了必须重新发送的现有消息,这听起来像是代理(Weblogic)问题或功能。
我从未在ActiveMQ上看到这种行为。重新传递失败的消息后,Apache代理会立即重新传递。
听起来这条消息在内部被“搁置”,以便稍后重新发送。这样绝对可以避免阻塞消息处理。
您是否可以在Weblogic上设置类似“交付延迟”的设置?我可以想象延迟的重新交付就像是安排了使用方的内部错误队列。