2015-02-05 67 views
0

我的问题,很快:骆驼最佳做法,消息和异常处理

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

我的问题,我应该如何满足商业预期,无需手动操作? (手动意味着AcitveMQ控制台) 所有解决方案都有兴趣。 (我通过系统尝试单独的DLQ,无尽的交付号码等) 如果有人知道解决方案,请与我分享。

谢谢!

FERI

回答

0

@Feri你需要使用JMS消息传送与客户确认,即如果你的路线成功地传递到Web服务,然后发送一个肯定的确认给JMS代理别人发送负。所以,消息被标记为出队,只有当它被成功传递时,否则它仍然在队列中。了解更多关于JMS消息传递是指

  1. http://www.javaworld.com/article/2074123/java-web-development/transaction-and-redelivery-in-jms.html
  2. http://wso2.com/library/articles/2013/01/jms-message-delivery-reliability-acknowledgement-patterns/
+0

你说得对!我。但必须做它的ServiceMix /骆驼环境。在这里我找不到这样的办法,可以这样做。 (骆驼是舒服的,如果你按照“骆驼顺从”的路径,但如果不是......!) – Feri 2015-02-05 14:30:20

+0

我不确定ServiceMix,但应该没关系。您必须使用Java或Spring DSL编写骆驼路线。关于设置确认模式,请参阅骆驼(文档)[http://camel.apache.org/jms.html]。对于客户端确认,您应该在消费者URI上设置选项,acknowledgementModeName为CLIENT_ACKNOWLEDGE,并在传递消息后,从交换中获取JMS消息并调用确认方法。 – 2015-02-05 14:43:43

+0

我会尝试你的建议,但我认为,这有点复杂。可调用的WS是“InOnly”,所以我不明白。我的问题不是WS回答处理,而是骆驼异常处理。我无法根据需要设置骆驼路线。如果在路由处理过程中发生了一些错误,那么骆驼不会将消息留给原始队列,所有事情都会将其带到死信队列中。 – Feri 2015-02-05 15:07:10