任何人都可以解释如何使用jdbc端点进行camel负载均衡吗? 如果我的第一个数据库已关闭,则需要自动选择第二个数据库。
我的路线建设者:
from("direct:jdbcisuserexists").setBody(simple("${body}"))
.loadBalance()
.failover()
.to("jdbc:dataSource?resetAutoCommit=false&outputType=SelectList","jdbc:dataSource1?resetAutoCommit=false&outputType=SelectList");
答案 0 :(得分:0)
尝试以下方法:
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)。