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



我有一个Apache Camel连接到ActiveMQ的系统,我们有各种处理消息的客户端,其中一些客户端通过STOMP使用Python。

所以我们的设置看起来像:

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

我们使用了请求-回复(InOut(类型的交换模式,效果非常好。然而,处理错误的正确方法还不清楚。理想情况下,当其中一个服务失败时,我希望能够在Camel中触发适当的错误处理,这样我们就可以对失败进程的重试、回退或警报等问题有一个统一的策略。对于JMS消费者来说,似乎有一些支持以诸如";transferException";然而,只有当另一端的客户端通过序列化消息等来使用JMS/Java时,这些才可用。对于连接到ActiveMQ的通用(例如:STOMP协议(客户端,我看不到(a(发出错误信号的方法,以及(b(提供错误的细节(堆栈跟踪、错误原因等(,使得它们传播回骆驼路由/异常处理层。目前,如果我想让它看起来像是我必须使用拦截器或其他方式手动实现它。

这里有我可以使用的最佳实践或模式吗?

理想情况下,可以设置一个消息头/属性,以便Camel将JMS回复解释为另一端的失败。但是,我在文档中找不到这样的标题。

我看到了两种可能的方法:

  1. 在ActiveMQ级别定义一些策略,将失败的JMS消息放入死信队列(DLQ(中。然后,您可以在Camel级别上配置一条使用DLQ并对每条失败消息做出适当反应(日志记录、警报等(的路由。但我担心你将无法获得太多的上下文(如错误堆栈跟踪(

  2. 使用咨询消息在ActiveMQ级别上继续播放。这将允许您">以使用常规JMS消息来监视系统";(例如,在消息传递、消息消耗方面(,并设置或多或少类似拦截器的逻辑。不确定是否存在失败事件,但值得检查。。。

最新更新