• SpringCloud 系列之 zookeeper


    简介

    ZooKeeper 是一种分布式协调服务,用于管理大型主机。ZooKeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。

    使用

    安装使用

    安装使用不在过多赘述了,一开始做了一半,后来感觉和别人的一样,而且别人的更加专业,就删了,安装步骤在下面的参考文章中有描述

    项目中使用

    这里主要是被当作注册中心来使用,暂时没有其它的用法
    新建Spring Boot项目springcloud-zk-A,pom文件加入依赖:

    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
    </dependency>
    

    配置文件application.yml

    server:
      port: 80
    spring:
      application:
        #服务别名——注册到zookeeper注册中心的名称
        name: springcloud-zk-A
      cloud:
        zookeeper:
          connect-string: 111.111.111.111:2181 #linux的ip加暴露的端口号,请填写你自己的
    

    启动类上添加注解:

    @EnableDiscoveryClient

    启动运行

    先启动zookeeper
    在linux中,通过减压一会先进入zookeeper/bin目录并启动zookeeper

    cd zookeeper-3.4.14/bin/
    ./zkServer.sh start

    启动成功以后,启动项目springcloud-zk-A (记得配置文件的zookeeper地址要填对,安全组,端口,防火墙都要考虑)
    进入zookeeper的客户端,并且观察项目服务是否注册成功

    ./zkCli.sh
    ls /
    ls /services
    ls /services/
    最后可以看到我们对应的服务信息

    新建项目实现两个服务之间相互调用

    新建springboot 项目 springcloud-zk-a,并引入pom文件:

        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>2.1.0.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
                <version>2.1.0.RELEASE</version>
                        <exclusions>
              <!--  先排除自带的zookeeper3.5.3-->
                            <exclusion>
                                <groupId>org.apache.zookeeper</groupId>
                                <artifactId>zookeeper</artifactId>
                            </exclusion>
                        </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
                <version>2.1.0.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>4.5.13</version>
            </dependency>
            <!--添加zookeeper3.4.9版本(引入对应版本的依赖)-->
                <dependency>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                    <version>3.4.9</version>
                </dependency>
            <!--        工具包-可不加-->
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>5.5.4</version>
            </dependency>
        </dependencies>
    

    application.yml 配置文件

    #端口号
    server:
      port: 80
    spring:
      application:
        #服务别名——注册到zookeeper注册中心的名称
        name: springcloud-zk-a
      cloud:
        zookeeper:
          connect-string: 111.111.111.111:2181 #linux的ip加暴露的端口号,请填写你自己的
    

    在项目的启动类中加入如下注解:

    @EnableDiscoveryClient

    配置 ribbon 实现服务调用

    @Configuration
    public class ApplicationContextConfig {
        @Bean
        @LoadBalanced   //负载均衡  ribbon
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }
    

    相互调用的demo

    @RestController
    public class UserController {
    
        @Autowired
        RestTemplate restTemplate;
    
        @Value("${server.port}")
        private String port;
        @Value("${spring.application.name}")
        private String serversName;
        public final static String URL="http://springcloud-zk-b";
    
        /**
         * 获取服务信息
         * @param serverName
         * @return
         */
            @GetMapping("/getInfo/{serverName}")
        public String getInfo(@PathVariable("serverName")String serverName){
            if(StrUtil.isBlank(serverName)){
                return "请输入正确的服务器名称1";
            }
            if("a".equals(serverName)){
                String result=new String("当前项目:");
                result = result+serversName+"端口号:"+port+"当前时间:"+DateUtil.now();
                return result;
            }else {
                return restTemplate.getForObject(URL+"/getInfo/"+serverName,String.class);
            }
        }
    }
    

    模仿springcloud-zk-a 创建springcloud-zk-b 修改配置文件中的服务名和端口号,然后再修改对应的调用的demo

    启动服务,相互调用如下:

    查看服务信息:

    首先去获取当前服务的id
    ls /services/springcloud-zk-a
    获取服务的具体信息
    get /services/springcloud-zk-a/a1dd48ec-0129-4693-a42b-e444333480ed


    获取所有服务列表:

    ls /services

    服务实例之间的相互调用:


    项目地址

    关于项目的地址,有兴趣的可以自行下载
    git@gitee.com:anxc/study-demo-eureka.git

    参考文章

    https://blog.csdn.net/jiahao1186/article/details/82633588
    安装步骤: https://www.hellojava.com/a/92687.html
    https://blog.csdn.net/u010391342/article/details/100404588

  • 相关阅读:
    flask笔记(引用)
    三元表达式(列表解析+if)
    生成器
    闭包、装饰器、高阶函数
    列表的解压和取值
    模块
    时间操作
    day16 css, dom
    day 15 html(2) css,javascript,dom
    day 14 html
  • 原文地址:https://www.cnblogs.com/Anxc/p/14175203.html
Copyright © 2020-2023  润新知