• SpringCloud系列(16)--将服务提供者Provider注册进Zookeeper


    前言:在上一章节中我们说明了一些关于Eureka自我保护模式,而且自上一章节起关于Eureka的知识已经讲的差不多了,不过因为Eureka已经停更了,为了安全考虑,我们要用还在更新维护的注册中心来取代Eureka,而本章节则是关于如何使用Zookeeper来代替Eureka

    Eureka停更说明:https://github.com/Netflix/eureka/wiki

    大意就是Eureka2.0停更了,如果要继续使用Eureka,所产生的风险一切自负

    准备环境:

    需要先安装Zookeeper,如果没有安装的同学可以参考以下文章来进行安装

    https://blog.csdn.net/m0_64284147/article/details/132260865

    1、再次创建一个服务提供者模块,命名为provider-payment8004
    (1)在父工程下新建模块

    (2)选择模块的项目类型为Maven并选择模块要使用的JDK版本
    (3)填写子模块的名称,然后点完成即可完成创建 

    效果图:

    (4)修改provider-payment8004子模块的pom.xml文件,然后reolad一下,下载依赖

    例:

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <parent>
    6. <artifactId>springcloud01artifactId>
    7. <groupId>com.ken.springcloudgroupId>
    8. <version>1.0-SNAPSHOTversion>
    9. parent>
    10. <modelVersion>4.0.0modelVersion>
    11. <artifactId>provider-payment8004artifactId>
    12. <dependencies>
    13. <dependency>
    14. <groupId>org.springframework.bootgroupId>
    15. <artifactId>spring-boot-starter-webartifactId>
    16. dependency>
    17. <dependency>
    18. <groupId>org.springframework.bootgroupId>
    19. <artifactId>spring-boot-devtoolsartifactId>
    20. <scope>runtimescope>
    21. <optional>trueoptional>
    22. dependency>
    23. <dependency>
    24. <groupId>org.projectlombokgroupId>
    25. <artifactId>lombokartifactId>
    26. <optional>trueoptional>
    27. dependency>
    28. <dependency>
    29. <groupId>org.springframework.bootgroupId>
    30. <artifactId>spring-boot-starter-testartifactId>
    31. <scope>testscope>
    32. dependency>
    33. <dependency>
    34. <groupId>com.ken.springcloudgroupId>
    35. <artifactId>api-commonsartifactId>
    36. <version>${project.version}version>
    37. dependency>
    38. <dependency>
    39. <groupId>org.springframework.cloudgroupId>
    40. <artifactId>spring-cloud-starter-zookeeper-discoveryartifactId>
    41. dependency>
    42. dependencies>
    43. project>
    2、为子模块添加名为application的yml配置文件(注:yml是官方推荐的配置文件格式,最好使用yml文件而不是properties文件)

    效果图:

    3、修改application.yml文件配置
    1. #服务端口号
    2. server:
    3. port: 8004
    4. #服务名称
    5. spring:
    6. application:
    7. name: cloud-payment-service
    8. cloud:
    9. zookeeper:
    10. #zookeeper所在服务的ip和Client的端口号
    11. connect-string: 192.168.194.130:2181

    4、为provider-payment8004子模块新建一个主启动类,类名输入com.ken.springcloud.PaymentMain8004,然后创建即可

     效果图:

    5、编写provider-payment8004子模块的主启动类
    1. package com.ken.springcloud;
    2. import org.springframework.boot.SpringApplication;
    3. import org.springframework.boot.autoconfigure.SpringBootApplication;
    4. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    5. @SpringBootApplication
    6. //该注解用于向使用consul或zookeeper作为注册中心时注册服务
    7. @EnableDiscoveryClient
    8. public class PaymentMain8004 {
    9. public static void main(String[] args) {
    10. SpringApplication.run(PaymentMain8004.class, args);
    11. }
    12. }

    效果图:

    6、在com.ken.springcloud包下新建controller包和PaymentController控制类,在类名输入controller.PaymentController,然后创建即可

    效果图:

    7、编写PaymentController控制类的内容 
    1. package com.ken.springcloud.controller;
    2. import lombok.extern.slf4j.Slf4j;
    3. import org.springframework.beans.factory.annotation.Value;
    4. import org.springframework.web.bind.annotation.GetMapping;
    5. import org.springframework.web.bind.annotation.RestController;
    6. import java.util.UUID;
    7. @RestController
    8. @Slf4j
    9. public class PaymentController {
    10. @Value("${server.port}")
    11. private String serverPort;
    12. @GetMapping("/payment/zk")
    13. public String paymentzk() {
    14. return "springcloud with zookeeper:" + serverPort + "\t" + UUID.randomUUID();
    15. }
    16. }

    8、启动Zookeeper
    ./zkServer.sh start

    效果图:

    9、启动Zookeeper客户端
    ./zkCli.sh

     效果图:

    10、查看zookeeper的节点
    ls /

    可以发现现在zookeeper里的节点就只有一个

    效果图: 

    11、启动provider-payment8004子模块

    效果图: 

    12、查看zookeeper现在的节点
    ls /

    可以发现多出了一个services的节点 

    效果图:

     

    13、查看services节点的信息
    ls /services

    可以看到services节点的里有个名为cloud-payment-service的服务,这个服务就是我们的provider-payment8004服务,这证明provider-payment8004成功注册进了zookeeper里

    效果图: 

    14、请求接口查看服务是否正常运行 

    在地址栏输入http://localhost:8004/payment/zk并回车调用接口,可以看到数据返回成功

     

    15、查看服务的基本信息
    (1)获取注册进zookeeper的服务的流水号
    ls /services/cloud-payment-service

    效果图: 

    (2)获取服务的基本信息
    get /services/cloud-payment-service/636ff382-1979-4bcb-a0a2-e1aec44e79ce

    效果图: 

    格式化后的json串:

    其他:

    1、注册进zookeeper的服务是临时节点

    在把服务关停后,zookeeper检测不到服务的心跳后过一会就会把服务剔除,重新启动服务后又会恢复,但这时候服务的流水号就会改变

    效果图:

  • 相关阅读:
    Java并发编程: Thread常见方法
    【selenium】多 frame 切换定位元素
    ceisum初始化
    这个为什么没有渲染就变成了这样了,有什么办法可以变回来吗?😭😭
    计算机毕业设计node.js+vue在线日程管理系统
    每日10题
    如何搭建测试环境?(详解)
    年轻人的第一条SQL查询语句
    c语言中的fread
    设计一个填充工具完美解决前后端甩锅的问题了
  • 原文地址:https://blog.csdn.net/m0_64284147/article/details/132259569