Exception handling 驼峰最佳实践、消息和异常处理

Exception handling 驼峰最佳实践、消息和异常处理,exception-handling,jms,apache-camel,Exception Handling,Jms,Apache Camel,我的问题,很快: 我必须编写系统,通过ServiceMix发布数据。目标端点是Web服务。这是真正的可能性,一个或多个然后停止。 业务流程需要正确的消息顺序。 因为每个系统都有一个专用队列,所以包含消息的是什么。目标web服务由专用路由调用,其中端点的定义由动态路由器进行。 如果没有错误,它工作正常,但是。。。 如果发布未成功,则消息将登录到DLQ。 我理解它的逻辑,但我认为这个问题不仅仅是我的。 我想将消息保留在原始队列中,与消息到达的位置相同。我可以停止队列处理器路由,然后重新启动它。这就足

我的问题,很快:

我必须编写系统,通过ServiceMix发布数据。目标端点是Web服务。这是真正的可能性,一个或多个然后停止。 业务流程需要正确的消息顺序。 因为每个系统都有一个专用队列,所以包含消息的是什么。目标web服务由专用路由调用,其中端点的定义由动态路由器进行。 如果没有错误,它工作正常,但是。。。 如果发布未成功,则消息将登录到DLQ。 我理解它的逻辑,但我认为这个问题不仅仅是我的。 我想将消息保留在原始队列中,与消息到达的位置相同。我可以停止队列处理器路由,然后重新启动它。这就足够处理输出错误了

我的问题是,在没有手动操作的情况下,我应该如何满足业务期望?(手动指AcitveMQ控制台) 所有解决方案都感兴趣。(我尝试按系统、无止境的重新交付数量等进行单独的DLQ) 如果有人知道解决方案,请与我分享

谢谢大家!


Feri

@Feri您需要将JMS消息传递与客户端确认一起使用,即如果您的路由成功传递到web服务,则向JMS代理发送肯定确认,否则发送否定确认。因此,只有在成功传递消息时,消息才会标记为已出列,否则它将保留在队列中。阅读有关JMS中消息传递的更多信息,请参阅


  • 你是对的!。但我必须在ServiceMix/Camel环境中完成。而在这里我找不到这样的方法,什么能做到这一点。(如果您遵循“符合骆驼”的路径,骆驼是舒适的,但如果不是…!)我不确定ServiceMix,但这不重要。您必须使用Java或SpringDSL编写骆驼路由。参见camel's(文档)[在设置确认模式时。对于客户端确认,您应在使用者URI上将选项AcknowledgementModelName设置为client_ACKNOWLEDGE,并在传递消息后,从exchange获取JMS消息并调用ACKNOWLEDGE方法。我将尝试您的建议,但我认为这有点复杂。可调用的WS是“InOnly”,所以我没有得到确认。我的问题不是WS-answer处理,而是Camel异常处理。我无法根据需要设置Camel路由。如果路由处理中发生错误,则Camel不会将消息保留在原始队列中,所有内容都会将其带到死信队列。