spring boot连接clickhouse集群,实现故障节点自动切换

程序去连接clickhouse集群,要求当连接到故障节点时,可以自动去连接后面的可用节点,实现高可用。

  1. 新建ClickhouseDatasource,使用自定义的datasource

    复制代码
    @Bean(name="clickHouseDataSource")
     public DataSource clickHouseDataSource() throws Exception {
         ClickHouseDataSourceWithFailover datasource = new ClickHouseDataSourceWithFailover(ConnectInfo.ckIPs, userName, password, 5000);
         return datasource;
     }
  2. 自定义ClickHouseDataSourceWithFailover,连接失败时自动连接下一个节点

    public class ClickHouseDataSourceWithFailover extends ClickHouseDataSource {
    private final List<String> nodes;
    private final String username;
    private final String password;
    private final int timeout;

    复制代码
     public ClickHouseDataSourceWithFailover(List<String> nodes, String username, String password, int timeout) throws SQLException {
         super(String.format("jdbc:clickhouse://%s:8123/audit?connect_timeout=%d&socket_timeout=500000", nodes.get(0), timeout));
         this.nodes = nodes;
         this.username = username;
         this.password = password;
         this.timeout = timeout;
     }
    
     @Override
     public ClickHouseConnection getConnection() throws SQLException {
         for (String node : nodes) {
             try {
                 String url = String.format("jdbc:clickhouse://%s:8123/db?connect_timeout=%d&socket_timeout=500000", node, timeout);
                 Properties properties = new Properties();
                 properties.put("username", username);
                 properties.put("password", password);
    
                 ClickHouseDataSource dataSource = new ClickHouseDataSource(url, properties);
                 return dataSource.getConnection();
             } catch (SQLException e) {
                 log.error("Failed to connect to node: {}, ex:{}", node, e);
             }
         }
         throw new SQLException("Unable to connect to any ClickHouse node.");
     }

    }

相关推荐
notillusion15 分钟前
KWW#71843
java·php·程序优化
xiangzhihong822 分钟前
Spring Boot集成SSE实现AI对话的流式响应
人工智能·spring boot
Deschen44 分钟前
设计模式-抽象工厂模式
java·设计模式·抽象工厂模式
齐木卡卡西在敲代码1 小时前
java流式编程学习
java
ʚ希希ɞ ྀ1 小时前
SpringBoot的学习
java·spring boot·学习
notillusion1 小时前
TRX#22597
java·php·程序优化
冬天的雪20082 小时前
java内存性能优化工具Mat
java·开发语言
Le1Yu2 小时前
消息队列以及RabbitMQ的使用
java·开发语言
linweidong2 小时前
理想汽车Java后台开发面试题及参考答案(下)
jvm·spring boot·spring cloud·rpc·虚拟机·feign·二叉树排序