怎么通过Zookeeper的API注册微服务到Zookeeper
怎么通过Zookeeper的API注册微服务到Zookeeper ,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
公司主营业务:成都做网站、网站建设、外贸营销网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联推出虞城免费做网站回馈大家。
一.注册到ZK
springboot工程通过引入zk的依赖,通过注解注册到zk,这个网上资料很多,就不多啰嗦了,这里主要给出,通过api注册到zk,什么场景会用到呢?比如环境中有一些springboot工程,也有非springboot工程,那么对于springboot工程直接通过注解注册,通过Feign调用其他微服务,非springboot工程通过api注解,其他服务通过服务名称调用即可;
二.springboot工程注册
sprinboot工程主需要引入相关依赖,通过注解即可,这里一笔带过:
注解:@EnableDiscoveryClient org.springframework.cloud spring-cloud-starter-zookeeper-discovery 1.1.3.RELEASE
三.普通Java工程
1.这里我以springboot工程为例,但是不引入第二步中的依赖来实现注册和服务调用
pom依赖org.apache.zookeeper zookeeper 3.4.11 pom com.101tec zkclient 0.10
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> allServiceUrl() { List
list = discoveryClient.getServices(); List > 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命令查看下面的节点内的数据内容,如下:
然后我们大概明白了,原来一个微服务实例注册到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 问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。
分享文章:怎么通过Zookeeper的API注册微服务到Zookeeper
当前路径:http://myzitong.com/article/jjhjci.html