怎么通过Zookeeper的API注册微服务到Zookeeper

发布时间:2021-10-20 15:30:50 作者:柒染
来源:亿速云 阅读:170

怎么通过Zookeeper的API注册微服务到Zookeeper ,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

一.注册到ZK

    springboot工程通过引入zk的依赖,通过注解注册到zk,这个网上资料很多,就不多啰嗦了,这里主要给出,通过api注册到zk,什么场景会用到呢?比如环境中有一些springboot工程,也有非springboot工程,那么对于springboot工程直接通过注解注册,通过Feign调用其他微服务,非springboot工程通过api注解,其他服务通过服务名称调用即可;

二.springboot工程注册

    sprinboot工程主需要引入相关依赖,通过注解即可,这里一笔带过:
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        <version>1.1.3.RELEASE</version>
    </dependency>
    
    注解:@EnableDiscoveryClient

三.普通Java工程

1.这里我以springboot工程为例,但是不引入第二步中的依赖来实现注册和服务调用
    pom依赖
    <dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
			<version>3.4.11</version>
			<type>pom</type>
		</dependency>

		<!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.10</version>
	</dependency>
2.环境简介:

    这里我先注册两个服务到ZK,一个zkClient,一个provider,这俩个都是标准的springboot工程,集成第二步中的组件注册,zkClient会在接口中调用provider和后面要通过api注册的微服务zkServices,并且有个接口会返回所有的实例,简单代码如下:

    //使用Feign调用微服务
    @RequestMapping("/")
        public String test() {
	        //调用provider服务
            String str1 = providerClientI.callProviderTwo();
            //调用zkServices服务
            String str2 = zkClientI.callProviderOne();
            return str1 + "-------" + str;
    }
    
    //获取所有zk的微服务实例
    @GetMapping("/allServices")
    public List<List<ServiceInstance>> allServiceUrl() {
        List<String> list = discoveryClient.getServices();
        List<List<ServiceInstance>> serviceInstance = new ArrayList<>();
        if (list != null && list.size() > 0) {
            for (String serviceId : list) {
                serviceInstance.add(discoveryClient.getInstances(serviceId));
            }
        }
        return serviceInstance;
    }
3.ZK查看:

    进入到zk的目录下,使用命令./zkCli.sh -server 192.168.xx.xx:2181接入zookeeper,然后使用ls / 查看所有的节点,然后使用ls /services查看services下的节点,注册的服务默认在services节点下,此时可以看到provider,和zkClient,查看provider和zkClient下面发现下面有一个节点,貌似是以UUID命名的,然后使用get命令查看下面的节点内的数据内容,如下:

怎么通过Zookeeper的API注册微服务到Zookeeper

然后我们大概明白了,原来一个微服务实例注册到zk,就是在节点里面放了这些数据,下面开始我们通过API注册的工作

4.API注册:

    我先来一段很简单的代码,全部是写死的,后面测试我们的方法可行之后,我们再对代码进行优雅的改造,该封装的封装,该写成配置的就配置化,先验证后完善,这里的regeister方法是核心方法,里面通过Zookeeper类的create方法向服务器创建节点并把数据写入节点,实际上写入的就是服务的注册信息,写入之后,其他的节点才能发现本节点,继而才能调用它;

@Override
    public void register(String serviceName, String serviceAddress) {
        String registryPath = REGISTRY_PATH;
        try {
            zk.create("/services/zkServices", null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            String  uuid = "95b4f91c-96b9-4aa6-ab61-935a7f8be599";
            String data = "{\"name\":\"zkService\",\"id\":\"95b4f91c-96b9-4aa6-ab61-935a7f8be599\",\"address\":\"192.168.6.164\",\"port\":9505,\"sslPort\":null,\"payload\":{\"@class\":\"org.springframework.cloud.zookeeper.discovery.ZookeeperInstance\",\"id\":\"zkService:9505\",\"name\":\"zkService\",\"metadata\":{\"instance_status\":\"UP\"}},\"registrationTimeUTC\":1534763883884,\"serviceType\":\"DYNAMIC\",\"uriSpec\":{\"parts\":[{\"value\":\"scheme\",\"variable\":true},{\"value\":\"://\",\"variable\":false},{\"value\":\"address\",\"variable\":true},{\"value\":\":\",\"variable\":false},{\"value\":\"port\",\"variable\":true}]}}";
            zk.create("/services/zkServices/">

这段代码简单粗暴,就是直接create创建/services/zkServices节点,然后再create往里面放入数据,数据就是从provider服务里面拷贝过来的,就是个json,我把相关的地址,服务名称啥的改了下,然后启动工程,之后检查zk,果然创建了节点,get命令查看数据也和创建的一致,然后在访问zkClient服务的上面的两个接口,都成功了,一个正确的返回了zkServices和provider的响应字符串,另一个接口正确显示出了三个服务的信息,包括zkClient,provider,zkServices,这说明通过api注册一个服务成功了;

四.普通Java工程

    验证方法正确之后,我们对代码进行一下简单的封装,相关参数配置化。下一篇博客我给出封装后的代码和相关参数含义的简单解释。

关于怎么通过Zookeeper的API注册微服务到Zookeeper 问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

推荐阅读:
  1. Zookeeper教程从入门到精通
  2. zookeeper Java api

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

zookeeper api

上一篇:如何使用四象限法分析问题

下一篇:怎么解决superset nginx 反向代理配置遇到的小问题

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》