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.git

参考文章

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

posted @ 2020-12-27 16:32  Anxc  阅读(414)  评论(0编辑  收藏  举报