• SpringCloud Zookeeper


    Zookeeper是一个分布式协调工具,可以实现注册中心功能。使用Zookeeper服务器取代Eureka服务器,作为服务注册中心。

    快速安装

    安装Docker

    curl -sSL https://get.daocloud.io/docker | sh
    systemctl enable --now docker
    
    • 1
    • 2

    拉取zookeeper的镜像,创建并启动容器

    docker pull zookeeper:3.4.9
    docker run -d -e TZ="Asia/Shanghai" -p 2181:2181 -v /home/data/zookeeper:/data --name zookeeper --restart always zookeeper:3.4.9
    
    • 1
    • 2

    关闭Linux服务器防火墙

    systemctl stop firewalld
    
    • 1

    查看防火墙状态

    systemctl status firewalld
    
    • 1

    进入Zookeeper容器

    # 第一种方式:直接进入到zkCli中
    docker run -it --rm --link zookeeper:zookeeper zookeeper zkCli.sh -server zookeeper
    
    # 第二种方式:先进入容器,再进入到zkCli中
    docker exec -it zookeeper bash
    ./bin/zkCli.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    服务提供者

    新建一个maven工程,添加相关依赖,版本号是3.4.9

    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        
        <artifactId>spring-cloud-starter-zookeeper-discoveryartifactId>
        
        <exclusions>
            <exclusion>
                <groupId>org.apache.zookeepergroupId>
                <artifactId>zookeeperartifactId>
            exclusion>
        exclusions>
    dependency>
    
    
    <dependency>
        <groupId>org.apache.zookeepergroupId>
        <artifactId>zookeeperartifactId>
        <version>3.4.9version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    image

    配置yml文件:

    #8004表示注册到zookeeper服务器的支付服务提供者端口号
    server:
      port: 8004
    #服务别名----注册zookeeper到注册中心名称
    spring:
      application:
        name: cloud-provider-payment
      cloud:
        zookeeper:
          # zookeeper的ip+端口
          connect-string: 192.168.182.130:2181
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    主启动类:

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

    Controller,随便写一个接口,以检查是否注册进Zookeeper服务:

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

    启动项目后,进入Zookeeper客户端,可以看到:

    image

    调用接口:成功

    image

    服务节点是临时节点还是持久节点?

    在服务运行的时候,把服务停掉,可以明确的看到Zookeeper会将停掉的节点给清除掉,所以服务节点是临时节点。重启后,得到的流水号也是不一样的。

    服务消费者

    创建一个Maven工程,pom文件和上面的服务提供者一样,

    配置yml文件:

    server:
      port: 80
    
    spring:
      application:
        name: cloud-consumer-order
      cloud:
      #注册到zookeeper地址
        zookeeper:
          connect-string: 192.168.182.130:2181
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    主启动类加上@EnableDiscoveryClient 注解。

    将RestTemplate加入到容器。

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    使用RestTemplate调用服务提供者的接口:

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

    启动项目,服务消费者也注册进了Zookeeper中,并且调用服务消费者的接口成功:

    image

    image

  • 相关阅读:
    【git】新电脑(Windows)中Git配置SSH公钥
    linux systemd start stop enable disable命令区别
    asp.net+sqlserver电费征缴管理系统C#项目
    从入门开始手把手搭建千万级Java算法测试-主页面的搭建和自定义测试数组生成类
    全家桶Spring、HikariCP、Mybatis和Oracle配置,你想要的都在这里
    【从零开始学习 SystemVerilog】2.13、SystemVerilog 数据类型—— Structure(结构体)
    7月SCI/SSCI期刊变动,警惕这5本被剔除
    轻量级神经网络算法-总结对比
    已超1000+测试员分享!Python自动化测试案例实战
    java计算机毕业设计后勤管理系统源码+mysql数据库+系统+lw文档+部署
  • 原文地址:https://blog.csdn.net/weixin_44895385/article/details/127694374