ZkServiceDiscovery.java 1.2 KB
Newer Older
1 2
package github.javaguide.registry;

S
shuang.kou 已提交
3 4
import github.javaguide.loadbalance.LoadBalance;
import github.javaguide.loadbalance.RandomLoadBalance;
5
import github.javaguide.utils.zk.CuratorUtils;
6
import lombok.extern.slf4j.Slf4j;
7 8

import java.net.InetSocketAddress;
S
shuang.kou 已提交
9
import java.util.List;
10 11 12 13 14 15 16

/**
 * 基于 zookeeper 实现服务发现
 *
 * @author shuang.kou
 * @createTime 2020年06月01日 15:16:00
 */
17
@Slf4j
18
public class ZkServiceDiscovery implements ServiceDiscovery {
S
shuang.kou 已提交
19 20 21 22 23
    private final LoadBalance loadBalance;

    public ZkServiceDiscovery() {
        this.loadBalance = new RandomLoadBalance();
    }
24 25 26

    @Override
    public InetSocketAddress lookupService(String serviceName) {
27
        // 这里直接去了第一个找到的服务地址,eg:127.0.0.1:9999
S
shuang.kou 已提交
28 29 30 31 32
        List<String> serviceUrlList = CuratorUtils.getChildrenNodes(serviceName);
        // 负载均衡
        String targetServiceUrl = loadBalance.selectServiceAddress(serviceUrlList);
        log.info("成功找到服务地址:[{}]", targetServiceUrl);
        String[] socketAddressArray = targetServiceUrl.split(":");
33 34 35
        String host = socketAddressArray[0];
        int port = Integer.parseInt(socketAddressArray[1]);
        return new InetSocketAddress(host, port);
36 37
    }
}