当前位置: 首页 > 知识库问答 >
问题:

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

楚权
2023-03-14

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

我们有一个路由,每天从数据库中提取数据(让我们称之为IN_DB),执行一些逻辑并插入另一个数据库(OUT_DB),另一个路由订阅XML数据的JMS主题,执行一些逻辑并全天插入同一个数据库(OUT_DB)。

需求是,当JMS主题连接因任何原因中断时,我们会一直尝试无限期地重新连接,一旦重新连接成功,我们需要返回数据库(IN_DB)并执行另一个负载来填补主题中断的空白。

我的问题是我们如何在Camel中实现这个逻辑(“我连接了,然后断开了,现在又连接了”)?当主题下降时,以主题消费者开始的路由会发生什么,路由会停止吗?或者它会向一些错误队列发出错误消息吗?我是否必须编写自己的处理程序来监控主题连接,或者当主题返回并设置一些消息头时,Camel会自动重新连接,或者设置一些上下文变量来指示“我连接了,然后断开了,现在又连接了”的场景已经发生?我很高兴围绕调用数据库负载构建路由逻辑,我只是不知道在Camel中“检测”这种情况发生的最佳方式。

非常感谢任何建议。

共有1个答案

洪弘壮
2023-03-14

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

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

  1. 定义一个JMS异常侦听器。当基础连接消失时,这应该会让您知道

要检测它何时再次备份,我认为您只能向特定主题发布消息,并在另一个路由中查看来自该主题的消息。当您阅读关于此主题的消息时,您知道代理已经备份,因此您可以从数据库重新加载数据。

或者2。您可以在JMS主题上发布常规hearbeat消息。如果你停止接收它们,你就知道经纪人已经破产了。一旦你再次开始获取它们,你就知道它已经备份,你需要从数据库中重新加载数据。

 类似资料:
  • 问题内容: 我的程序在使用序列化数据(a )到磁盘时被杀死。我现在无法打开部分写入的文件。 是否可以部分或全部恢复数据?如果是这样,怎么办? 这是我尝试过的: 该文件不为空: 注意:字典中的所有数据均由python内置类型组成。 问题答案: 纯Python版本的,即使遇到错误也会保持堆栈,因此您至少可以从中获得一些收益: 我得到以下输出: 泡菜数据格式并不复杂。通读Python模块的源代码,您可能

  • 问题内容: 我有一个数据库,其中有一堆破碎的utf8字符散布在几个表上。字符列表不是很广泛的AFAIK(áéíúóÁÉÍÓÓÚÑñ) 修复给定的表非常简单 但是我无法检测到损坏的字符。如果我做类似的事情 由于排序规则(Ã= a),我几乎获得了所有字段。到目前为止,所有损坏的字符均以“Ô开头。数据库是西班牙语,因此不使用此特定字符 到目前为止,我得到的损坏字符列表是 是否知道如何使此SELECT正

  • 问题内容: 我正在编写一个模块,该模块从json获取文章数据,并在文章文本上显示大图像,这就是他们所说的英雄模块。 我已经有了数据并进行了设置,因此,如果有图像,它将显示该图像,如果数据中没有图像,则将显示默认图像。问题在于此方法不会替换断开的链接以显示默认图像。 我还是刚开始反应并使用状态…问题是,我应该使用状态来检查断开的链接,我该怎么做? 这就是我如何在模块中作为道具获取数据的方式: 我以这

  • 昨天我使用Xampp创建了一些简单的基于Web的实用工具。今天我想继续工作,但xampp控制面板给了我一些错误。 这是MySQL错误日志: 已经尝试过修复,但mySQL服务甚至无法启动,所以我有点无助。。。

  • 问题内容: 我正在使用apache commons http客户端使用post方法来调用url来发布参数,并且很少抛出以下错误。 有人可以建议导致此异常的原因以及如何对其进行调试吗? 问题答案: 原因是: 最通常的是,在另一端已经关闭连接时写入连接; 通常,对等方关闭连接而不读取其末端已经挂起的所有数据。 因此,在两种情况下,你的应用程序协议定义或实施都不充分。 还有第三个原因,我在这里不做记录,

  • 我需要一个快速的Java方法来检查JPEG文件是否有效,或者它是否是一个被截断/损坏的图像。 我试着用几种方法: > 使用javax.imageio库 我正在寻找一个Java替代UNIX程序jpeginfo,它大约快10倍(在我的PC上,大约10个图像/秒)。