使用jdbc端点实现Camel负载平衡



有人能解释一下如何使用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)。

最新更新