All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.lmaye.cloud.starter.canal.client.ClusterCanalClient Maven / Gradle / Ivy

package com.lmaye.cloud.starter.canal.client;

import com.alibaba.otter.canal.client.CanalConnector;
import com.alibaba.otter.canal.client.CanalConnectors;
import com.lmaye.cloud.starter.canal.handler.MessageHandler;
import org.apache.commons.lang.StringUtils;

import java.net.InetSocketAddress;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * -- ClusterCanalClient
 *
 * @author Lmay Zhou
 * @date 2021/3/22 11:27
 * @email [email protected]
 */
public class ClusterCanalClient extends AbstractCanalClient {
    public static final class Builder {
        /**
         * 是否开启
         */
        private Boolean enable;
        private String filter = StringUtils.EMPTY;
        private Integer batchSize = 1;
        private Long timeout = 1L;
        private TimeUnit unit = TimeUnit.SECONDS;
        private String canalServers;
        private String destination;
        private String userName;
        private String password;
        private MessageHandler messageHandler;

        private Builder() {
        }

        public static Builder builder() {
            return new Builder();
        }

        public Builder enable(boolean enable) {
            this.enable = enable;
            return this;
        }

        public Builder canalServers(String canalServers) {
            this.canalServers = canalServers;
            return this;
        }

        public Builder destination(String destination) {
            this.destination = destination;
            return this;
        }

        public Builder userName(String userName) {
            this.userName = userName;
            return this;
        }

        public Builder password(String password) {
            this.password = password;
            return this;
        }

        public Builder filter(String filter) {
            this.filter = filter;
            return this;
        }

        public Builder batchSize(Integer batchSize) {
            this.batchSize = batchSize;
            return this;
        }

        public Builder timeout(Long timeout) {
            this.timeout = timeout;
            return this;
        }

        public Builder unit(TimeUnit unit) {
            this.unit = unit;
            return this;
        }

        public Builder messageHandler(MessageHandler messageHandler) {
            this.messageHandler = messageHandler;
            return this;
        }

        public ClusterCanalClient build() {
            List list = Stream.of(canalServers.split(",")).map(s -> {
                String[] split = s.split(":");
                return new InetSocketAddress(split[0], Integer.parseInt(split[1]));
            }).collect(Collectors.toList());
            CanalConnector connector = CanalConnectors.newClusterConnector(list, destination, userName, password);
            ClusterCanalClient clusterCanalClient = new ClusterCanalClient();
            clusterCanalClient.enable = this.enable;
            clusterCanalClient.setMessageHandler(messageHandler);
            clusterCanalClient.setConnector(connector);
            clusterCanalClient.filter = this.filter;
            clusterCanalClient.unit = this.unit;
            clusterCanalClient.batchSize = this.batchSize;
            clusterCanalClient.timeout = this.timeout;
            return clusterCanalClient;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy