繁体   English   中英

如何在Apache Camel中检测损坏/恢复的JMS连接?

[英]How to detect broken/recovered JMS connection in Apache Camel?

我们正在使用Apache Camel(Camel 2.10.3,基于Java DSL)构建集成项目。

我们有一个从数据库中提取数据的路径(让我们称之为IN_DB),做一些逻辑并每天插入另一个数据库(OUT_DB),另一个订阅XML数据的JMS主题的路径,做一些逻辑和插入它整天都在同一个数据库(OUT_DB)中。

要求是当JMS主题连接因任何原因而失效时,我们会不断尝试重新连接,一旦重新连接成功,我们需要返回数据库(IN_DB)并进行另一次加载以填补主题的空白失意了。

我的问题是我们怎么能在Camel中做这个逻辑('我已经连接然后我断开连接,现在又连接了')? 当主题发生故障时,以主题消费者开头的路线会发生什么,路线会停止吗? 或者它会向某个错误队列发出错误消息? 我是否必须编写自己的处理程序来监视主题连接,或者当主题重新启动并设置一些消息头时Camel会自动重新连接,或者设置一些上下文变量以指示'我已连接然后我断开了连接现在我再次联系'情景已经发生了? 我很高兴围绕调用数据库负载构建路由逻辑我无法找出在Camel中“检测”这种情况发生的最佳方法。

任何建议非常感谢。

就重新连接到队列而言,它取决于您正在使用的JMS代理。 如果您正在使用ActiveMQ,那么您可以配置它如何通过URI重新连接,以便它可以尝试重新连接到另一个代理,在超时后重新连接到同一代理等。它的文档就在这里

要检测连接何时失败,从程序视图的角度来看,最简单的方法就是使用持久队列而不是主题。 但是,假设这是不可行的,那么我认为你有两个选择。

  1. 定义JMS异常监听器 这可以让您知道底层连接何时消失。

为了检测它何时再次备份,我认为你不得不在特定主题上发布消息并在另一条路线中查看来自该主题的消息。 当您阅读有关此主题的消息时,您知道代理已重新启动,因此您可以从数据库重新加载数据。

或2.您可以将常规的听力消息发布到您的JMS主题上。 如果你停止接收他们,你知道经纪人已经失败了。 一旦你再次开始获取它们,你就知道它已经备份,你需要从数据库重新加载数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM