使用jdbc端点进行Camel负载均衡

时间:2015-02-24 08:00:52

标签: jdbc apache-camel

任何人都可以解释如何使用jdbc端点进行camel负载均衡吗? 如果我的第一个数据库已关闭,则需要自动选择第二个数据库。

我的路线建设者:

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

1 个答案:

答案 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)。