• SpringCloud学习笔记(三)Zookeeper服务注册与发现


    目录

    一、Eureka停止更新了你怎么办

    二、SpringCloud整合Zookeeper代替Eureka

    1、注册中心Zookeeper

    2、服务提供者

    (1)新建模块cloud-provider-payment8004

     (2)新建消费者模块cloud-consumerzk-order80


    一、Eureka停止更新了你怎么办

    二、SpringCloud整合Zookeeper代替Eureka

    1、注册中心Zookeeper

    • zookeeper是一个分布式协调工具,可以实现注册中心功能
    • 关闭Linux服务器防火墙后动zookeeper服务器
    • zookeeper服务器取代Eureka服务器,zk作为服务注册中心

    2、服务提供者

    (1)新建模块cloud-provider-payment8004

    如果 zookeeper 的版本和导入的jar包版本不一致,启动就会报错,由于zk-discovery和zk之间的jar包冲突的问题。

     下图给出的是spring-cloud-starter-zookeeper-discovery所引入的zookeeper jar包版本,可在父pom中找到,如果自己的zoookeeper版本和其一致,可不用修改。

    pom.xml

    解决这种冲突,需要在 pom 文件中,排除掉引起冲突的jar包,添加和服务器zookeeper版本一致的 jar 包,但是新导入的 zookeeper jar包 又有 slf4j 冲突问题,于是再次排除引起冲突的jar包

    1. <project xmlns="http://maven.apache.org/POM/4.0.0"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <parent>
    5. <artifactId>cloud2020artifactId>
    6. <groupId>springcloudgroupId>
    7. <version>1.0-SNAPSHOTversion>
    8. parent>
    9. <modelVersion>4.0.0modelVersion>
    10. <artifactId>cloud-provider-payment8004artifactId>
    11. <dependencies>
    12. <dependency>
    13. <groupId>org.springframework.cloudgroupId>
    14. <artifactId>spring-cloud-starter-zookeeper-discoveryartifactId>
    15. <exclusions>
    16. <exclusion>
    17. <groupId>org.apache.zookeepergroupId>
    18. <artifactId>zookeeperartifactId>
    19. exclusion>
    20. exclusions>
    21. dependency>
    22. <dependency>
    23. <groupId>org.apache.zookeepergroupId>
    24. <artifactId>zookeeperartifactId>
    25. <version>3.5.7version>
    26. <exclusions>
    27. <exclusion>
    28. <groupId>org.slf4jgroupId>
    29. <artifactId>slf4j-log4j12artifactId>
    30. exclusion>
    31. exclusions>
    32. dependency>
    33. <dependency>
    34. <groupId>springcloudgroupId>
    35. <artifactId>cloud-api-commonsartifactId>
    36. <version>${project.version}version>
    37. dependency>
    38. <dependency>
    39. <groupId>org.springframework.bootgroupId>
    40. <artifactId>spring-boot-starter-webartifactId>
    41. dependency>
    42. <dependency>
    43. <groupId>org.springframework.bootgroupId>
    44. <artifactId>spring-boot-starter-actuatorartifactId>
    45. dependency>
    46. <dependency>
    47. <groupId>org.springframework.bootgroupId>
    48. <artifactId>spring-boot-devtoolsartifactId>
    49. <scope>runtimescope>
    50. <optional>trueoptional>
    51. dependency>
    52. <dependency>
    53. <groupId>org.projectlombokgroupId>
    54. <artifactId>lombokartifactId>
    55. <optional>trueoptional>
    56. dependency>
    57. <dependency>
    58. <groupId>org.springframework.bootgroupId>
    59. <artifactId>spring-boot-starter-testartifactId>
    60. <scope>testscope>
    61. dependency>
    62. dependencies>
    63. project>

    application.yml

    1. server:
    2. port: 8004
    3. spring:
    4. application:
    5. name: cloud-provider-payment
    6. cloud:
    7. zookeeper:
    8. connect-string: 192.168.16.104:2181 # zk地址 192.168.16.104是linux地址

    主启动类

    1. @SpringBootApplication
    2. @EnableDiscoveryClient //该注解用于向使用consul或者zookeeper作为注册中心时注册服务
    3. public class PaymentMain8004 {
    4. public static void main(String[] args) {
    5. SpringApplication.run(PaymentMain8004.class,args);
    6. }
    7. }

    Controller打印信息

    1. @RestController
    2. public class PaymentController {
    3. @Value("${server.port}")
    4. private String serverPort;
    5. @RequestMapping(value = "/payment/zk")
    6. public String paymentzk(){
    7. return "springcloud with zookeeper: "+serverPort+"\t"+ UUID.randomUUID().toString();
    8. }
    9. }

    测试

    然后就能在zk里查到注册的服务信息了。

     (2)新建消费者模块cloud-consumerzk-order80

    pom.xml,application.yml,主启动类与服务提供者类似

    config类,注入 RestTemplate

    1. @Configuration
    2. public class ApplicationContextBean {
    3. @Bean
    4. @LoadBalanced
    5. public RestTemplate getRestTemplate(){
    6. return new RestTemplate();
    7. }
    8. }

    controller层也是和之前类似:

    1. public class OrderZKController {
    2. public static final String INVOKE_URL = "http://cloud-provider-payment";
    3. @Resource
    4. private RestTemplate restTemplate;
    5. @GetMapping(value = "/consumer/payment/zk")
    6. public String paymentInfo(){
    7. String result = restTemplate.getForObject(INVOKE_URL+"/payment/zk",String.class);
    8. return result;
    9. }
    10. }

    测试,成功调用

     提取剧透:后面会用ribbon代替RestTemplate

  • 相关阅读:
    【无标题】线性表-C语言 数据结构
    iOS ☞ SDWebimage 内存暴增问题
    Go语言中list列表的基本操作(插入删除遍历以及实现栈与队列)
    Electron学习笔记(三)
    【毕业设计】后端实现——账单通过关键词简单分析收支
    target is not existed: .page-component__scroll .el-scrollbar__wrap
    1. 使用STM32CubeMX建立STM32G030C8T6项目工程
    Cesium Vue(三)— 相机配置
    Chatgpt掘金之旅—有爱AI商业实战篇|品牌故事业务|(十六)
    C# winfrom应用程序添加图标
  • 原文地址:https://blog.csdn.net/qq_51409098/article/details/125916487