有人能解释一下如何使用jdbc端点的骆驼负载平衡吗?如果我的第一个数据库坏了,它需要自动选择第二个数据库。
我的路线建设者:
from("direct:jdbcisuserexists").setBody(simple("${body}"))
.loadBalance()
.failover()
.to("jdbc:dataSource?resetAutoCommit=false&outputType=SelectList","jdbc:dataSource1?resetAutoCommit=false&outputType=SelectList");
尝试以下操作:
from("direct:jdbcisuserexists")
.setBody(simple("${body}"))
.loadBalance().failover()
.to("jdbc:dataSource?resetAutoCommit=false&outputType=SelectList")
.to("jdbc:dataSource1?resetAutoCommit=false&outputType=SelectList")
.end();
这应该有效,尽管感觉有点过于宽泛。failover()
DSL元素将处理所有异常。您可以将其缩小到一个特定的异常,例如通过failover(SQLException.class)
,但不能保证此异常是由数据库中断引起的(它可能是SQL语法中的某些内容)。
一个更好的选择(正如@Namphibian所暗示的)是有两个路由,每个路由都调用自己的JDBC端点。每个路由都可以选择性地检查SQLException是否确实是由中断引起的(例如,通过检查DB特定故障代码的错误消息)。要在出现故障时回退到第二个数据库,可以使用动态路由器(https://camel.apache.org/dynamic-router.html)。