Apache Camel中来自非Java ActiveMQ使用者的桥接错误

yhqotfr8  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(160)

我有一个系统,其中Apache Camel连接到ActiveMQ,我们有各种客户机处理消息,其中一些通过STOMP使用Python。
因此,我们的设置如下所示:

Apache Camel <==>  ActiveMQ <==> STOMP client

我们使用请求-回复(InOut)类型交换模式,这些模式工作得很好。但是,处理错误的正确方法还不清楚。理想情况下,当其中一个服务失败时,我希望能够在Camel中触发适当的错误处理,以便我们可以对重试等操作有一个统一的策略。对于JMS使用者,似乎有一些支持以属性的形式桥接错误,如“transferException”等。但是,只有当另一端的客户端使用JMS/Java时,这些功能才可用,因为它们通过序列化消息等方式工作。STOMP协议)客户端连接到ActiveMQ时,我无法找到一种方法来(a)发出错误信号,以及(B)提供错误的详细信息(堆栈跟踪、错误原因等),以便将它们传播回camel路由/异常处理层。目前,如果我想让它看起来像是我必须使用拦截器或其他方法手动实现它。
这里是否有我可以使用的最佳实践或模式?
理想情况下,应该设置一个消息头/属性,这样Camel会将JMS回复解释为另一端的失败。

dsekswqp

dsekswqp1#

我看到两种可能的方法:
1.在ActiveMQ级别定义一些策略,将失败的JMS消息放入死信队列(DLQ)中。然后,您可以在Camel级别配置一个路由,该路由使用该DLQ并对每个失败的消息做出适当的React(日志记录、警报等)。但是,恐怕您将无法获得很多上下文(如错误堆栈跟踪)
1.使用advisory messages仍然在ActiveMQ级别上运行。这将允许您“* 使用常规JMS消息监视系统 *”(例如,在msg传递、msg使用上),并设置或多或少类似于拦截器的逻辑。不确定是否存在失败事件,但值得检查...

相关问题