个人随笔
目录
五、zookeeper使用场景之:分布式注册中心
2020-12-07 17:36:39

一、背景

我们的微服务环境中,需要动态知道服务的情况,也就是服务发现,在SpringCloud中,分布式注册中心用的是Eureka,这里我们也可以用zookeeper来,zookeeper的临时节点和监听特性刚好可以用来做这个功能。下面举个例子吧,Eureka的可以参考我的笔记:https://www.suibibk.com/topic/556511662811643904

二、例子

这里就举个简单的例子,分布式注册中的原理什么的这里就不说了,这里举个服务提供者和服务消费者的例子即可。

三、代码实例

1、服务提供者

1-1、新建maven项目,pom.xml加入如下依赖
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  2. <modelVersion>4.0.0</modelVersion>
  3. <groupId>com.suibibk</groupId>
  4. <artifactId>springcloud-zk-provider</artifactId>
  5. <version>0.0.1-SNAPSHOT</version>
  6. <parent>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-parent</artifactId>
  9. <version>2.0.5.RELEASE</version>
  10. </parent>
  11. <!-- 管理依赖 -->
  12. <dependencyManagement>
  13. <dependencies>
  14. <dependency>
  15. <groupId>org.springframework.cloud</groupId>
  16. <artifactId>spring-cloud-dependencies</artifactId>
  17. <version>Finchley.M7</version>
  18. <type>pom</type>
  19. <scope>import</scope>
  20. </dependency>
  21. </dependencies>
  22. </dependencyManagement>
  23. <dependencies>
  24. <!-- SpringBoot整合Web组件 -->
  25. <dependency>
  26. <groupId>org.springframework.boot</groupId>
  27. <artifactId>spring-boot-starter-web</artifactId>
  28. </dependency>
  29. <!--Springboot整合zookeeper客户端-->
  30. <dependency>
  31. <groupId>org.springframework.cloud</groupId>
  32. <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
  33. </dependency>
  34. </dependencies>
  35. <!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
  36. <repositories>
  37. <repository>
  38. <id>spring-milestones</id>
  39. <name>Spring Milestones</name>
  40. <url>https://repo.spring.io/libs-milestone</url>
  41. <snapshots>
  42. <enabled>false</enabled>
  43. </snapshots>
  44. </repository>
  45. </repositories>
  46. </project>
1-2、application.yml
  1. server:
  2. # 表示注册到zookeeper服务的支付服务提供者端口号
  3. port: 8004
  4. spring:
  5. application:
  6. # 服务别名 ---注册zookeeper到注册中心名称
  7. name: springcloud-zk-provider
  8. cloud:
  9. zookeeper:
  10. connect-string: 192.168.209.4:2181
1-3、服务
  1. @SpringBootApplication
  2. @EnableDiscoveryClient // 该注解用于向使用consul或者zookeeper作为注册中心时注册服务
  3. @RestController
  4. public class ProviderController {
  5. @Value("${server.port}")
  6. private String serverPort;
  7. @RequestMapping("/zk")
  8. public String paymentzk(){
  9. return "springcloud with zookeeper: "+ serverPort+'\t'+ UUID.randomUUID().toString();
  10. }
  11. public static void main(String[] args) {
  12. SpringApplication.run(ProviderController.class,args);
  13. }
  14. }
1-4、启动

上面的例子很简单,相关注释也有,右键run启动然后再zookeeper控制台可以看到:

可以发现,服务已经注册到zookeeper了,其中/services ,/services/springcloud-zk-provider 是持久节点/services/springcloud-zk-provider/ca174228-5f60-4c0e-8d93-cae11cb6f3c3 是临时节点。

2、服务消费者

这里再建立一个服务消费者,其实代码结构跟提供者是类似的,改一下pom.xml的项目名称,改为springcloud-zk-consumer。

2-1、application.yml
  1. server:
  2. # 表示注册到zookeeper服务的支付服务提供者端口号
  3. port: 8080
  4. spring:
  5. application:
  6. # 服务别名 ---注册zookeeper到注册中心名称
  7. name: springcloud-zk-consumer
  8. cloud:
  9. zookeeper:
  10. connect-string: 192.168.209.4:2181
2-2、消费
  1. @SpringBootApplication
  2. @EnableDiscoveryClient // 该注解用于向使用consul或者zookeeper作为注册中心时注册服务
  3. @RestController
  4. public class ConsumerController {
  5. private static final String INVOKE_URL ="http://springcloud-zk-provider";
  6. @Value("${server.port}")
  7. private String serverPort;
  8. @Autowired
  9. private RestTemplate restTemplate;
  10. @GetMapping("/getZk")
  11. public String paymentInfo(){
  12. String result = restTemplate.getForObject(INVOKE_URL + "/zk", String.class);
  13. return result;
  14. }
  15. @Bean
  16. @LoadBalanced
  17. public RestTemplate getRestTemplate(){
  18. return new RestTemplate();
  19. }
  20. public static void main(String[] args) {
  21. SpringApplication.run(ConsumerController.class,args);
  22. }
  23. }

启动,访问浏览器测试,结果如下:

zk客户端

浏览器

2-3、停止应用

停止应用后,过一段时间,在zk控制台可以看到临时节点被删掉了。

收工!

 498

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2