我在Camel路由中实现了一项服务,该服务使用来自ActiveMQ队列的消息,进行一些处理并将它们发送到外部系统。
如果在调用外部系统时出现问题,则必须将消息ID通知回调用后端系统。由于必须维护消息顺序,因此服务需要推迟已排队和后续消息,直到错误条件得到解决。
实际上,必须从队列中删除失败的消息,因为它已被处理,能够失败。与骆驼重新发送相比,这可能会有所不同。
后端系统应控制进一步的过程。要么它再次发送有问题的消息,那么服务应该处理这一条消息(由其ID标识),然后继续处理延迟的消息。或者后端发送一些继续信号,该信号指示服务继续处理延迟消息,尽管失败的消息没有再次出现。这两个选项都可以解决错误情况。
到目前为止,我已经考虑过实现某种涉及多个队列的基于Camel的切换,其中路由决定它是否可以直接处理传入消息,或者是否有延迟处理消息。但我不知道是否有一些EIP以一种简洁的方式描绘这种情况。
你可以用漂亮的方法给我一些建议吗?
答案 0 :(得分:1)
您所描述的内容听起来(至少对我而言)是一个精心策划的工作流程与单个EIP - b / c您描述了跨多个步骤维护状态的需要。这完全可以通过事件驱动系统完成,但在尝试强制使用一个队列解决方案和单个EIP时通常会变得脆弱。
多队列/多个Camel路由方法是直接的,不需要任何不自然的行为(停止路由,重新排队等等)来维护消息排序等。
答案 1 :(得分:0)
也许您可以使用Resequencer EIP优先考虑失败的重试交换:http://camel.apache.org/resequencer.html。