2015-02-24 85 views
0

任何人都可以解释如何使用骆驼负载平衡jdbc端点? 如果我的第一个数据库关闭,它需要自动选择第二个数据库。骆驼负载平衡jdbc端点

我的路线建设者:

 from("direct:jdbcisuserexists").setBody(simple("${body}")) 
      .loadBalance() 
      .failover() 
      .to("jdbc:dataSource?resetAutoCommit=false&outputType=SelectList","jdbc:dataSource1?resetAutoCommit=false&outputType=SelectList"); 
+0

不要在骆驼上这样做。应该为数据库配置热故障转移/高可用性,即在MSSQL上它们可以在镜像集中。你指向一个地址,这是透明处理的。首先让您的架构进入HA解决方案,然后转到其他细节。 – Namphibian 2015-02-24 21:23:41

+0

@Nphphibian感谢您的评论。但我们正在使用nosql(Cassandra数据库),其中不建议进行负载均衡。所以我们用骆驼尝试它。 – asr 2015-02-25 08:18:28

+0

我的建议然后是创建两条路线。如果第一个失败,则将消息发送给第二个,然后在那里处理。我会看看我是否可以发表一个答案。 – Namphibian 2015-02-25 14:58:01

回答

0

尝试以下操作:

from("direct:jdbcisuserexists") 
    .setBody(simple("${body}")) 
    .loadBalance().failover() 
     .to("jdbc:dataSource?resetAutoCommit=false&outputType=SelectList") 
     .to("jdbc:dataSource1?resetAutoCommit=false&outputType=SelectList") 
    .end(); 

这应该工作,虽然它让人感觉有点过于宽泛。 DSL元素将适用于所有例外情况。您可以将其缩小到特定的例外,例如通过failover(SQLException.class),但不能保证此异常是由数据库中断(可能是SQL语法中的某些内容)引起的。

更好的选择(如@Namphibian所暗示的)将有两条路由,每条路由都调用它自己的JDBC端点。每条路径都可以选择性地检查SQLException实际上是否由于停机而导致(例如通过检查特定于DB的故障代码的错误消息)。要回退到第二个数据库失败,您可以使用动态路由器(https://camel.apache.org/dynamic-router.html)。