Mat*_*att 7 java jms 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 重新连接,以便它可以尝试重新连接到另一个代理、超时后重新连接到同一个代理等。它的文档位于此处。
要检测连接何时失败,从程序的角度来看,最简单的方法是仅使用持久队列而不是主题。但是,假设这是不可行的,那么我认为您有两种选择。
为了检测它何时再次备份,我认为您必须向特定主题发布消息并在另一条路线中监视来自该主题的消息。当您阅读有关此主题的消息时,您知道代理已恢复,因此您可以从数据库重新加载数据。
或者 2. 您可以将定期检测消息发布到您的 JMS 主题上。如果您停止接收它们,您就知道经纪人已经倒闭。一旦您再次开始获取它们,您就知道它已备份并且您需要从数据库重新加载数据。