zookeeper收藏

微服务架构 | 3.3 Apache Zookeeper 注册中

2022-01-17  本文已影响0人  多氯环己烷

前言

参考资料
《Spring Microservices in Action》
《Spring Cloud Alibaba 微服务原理与实战》
《B站 尚硅谷 SpringCloud 框架开发教程 周阳》
《Zookeeper 教程》
《Zookeeper 官网》

ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 Hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等;


1. Zookeeper 基础知识

1.1 Zookeeper 是什么

1.2 Zookeeper 的数据结构

属性 说明
cZxid 创建节点时的事务 ID
ctime 创建节点时的时间
mZxid 最后修改节点时的事务 ID
mtime 最后修改节点时的时间
pZxid 表示该节点的子节点列表最后一次修改的事务 ID(包括增删子节点,不包括改子节点内容)
cversion 子节点版本号,子节点每次修改版本号加 1
dataversion 数据版本号,数据每次修改该版本号加 1
aclversion 权限版本号,权限每次修改该版本号加 1
ephemeralOwner 创建该临时节点的会话的 sessionID(持久节点,该属性值为 0)
dataLength 该节点的数据长度
numChildren 该节点拥有直接子节点的数量

1.3 Watcher 机制

1.4 常见应用场景分析

基于临时有序节点的 Master 选举.png

1.5 Zookeeper 的版本冲突问题

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

1.6 Zookeeper 注册中心的实现原理

本篇或《12.1 使用 Apache Dubbo 实现远程通信》里的《5. Dubbo 使用 Zookeeper 作为注册中心》构建了如下示例;


Zookeeper 注册中心的实现原理.png

1.7 下面示例的相关说明

2. 安装并运行 Zookeeper 服务器

基于 Win10 下的 Zookeeper 服务器安装;

2.1 下载 Zookeeper

Zookeeper 解压.png

2.2 修改配置

修改 Zookeeper 配置.png

2.3 运行 Zookeeper 服务器

Zookeeper 服务器.png

3. 使用 Zookeeper 管理服务提供者

使用 Zookeeper 构建服务提供者大致与 Nacos 和 Consul 相同; Nacos 与 Consul 的构建方式详情请见《3.2 Alibaba Nacos 注册中心》与《3.4 HashiCorp Consul 注册中心》;

3.1 引入 pom.xml 依赖

<!-- SpringBoot整合zookeeper客户端 -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
  <!--先排除自带的zookeeper-->
  <exclusions>
    <exclusion>
      <groupId>org.apache.zookeeper</groupId>
      <artifactId>zookeeper</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<!--添加zookeeper3.4.9版本,这里可根据自己本地的下载的 zookeeper 版本进行配置-->
<dependency>
  <groupId>org.apache.zookeeper</groupId>
  <artifactId>zookeeper</artifactId>
  <version>3.4.9</version>
</dependency>

3.2 修改 boostrap.yml 配置文件

#8004表示注册到zookeeper服务器的支付服务提供者端口号
server:
  port: 8004
#服务别名----注册zookeeper到注册中心名称
spring:
  application:
    name: zkcloud-provider
  cloud:
    zookeeper:
      connect-string: 192.168.111.144:2181

3.3 在主启动类上添加注解

3.4 编写业务类,并在 controller 层开放接口

这里编写一个简单接口仅作为示例;

@RestController
public class providerController{
    @Value("${server.port}")
    private String serverPort;

    @RequestMapping(value = "/provider/zk")
    public String providerzk(){
        return "springcloud with zookeeper: "+serverPort+"\t"+ UUID.randomUUID().toString();
    }
}

4. 使用 Zookeeper 管理服务消费者

使用 Zookeeper 构建服务消费者大致与 Nacos 和 Consul 相同; Nacos 与 Consul 的构建方式详情请见《3.2 Alibaba Nacos 注册中心》与《3.4 HashiCorp Consul 注册中心》;

4.1 引入 pom.xml 依赖

同服务提供者端的依赖;

<!-- SpringBoot整合zookeeper客户端 -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
  <!--先排除自带的zookeeper-->
  <exclusions>
    <exclusion>
      <groupId>org.apache.zookeeper</groupId>
      <artifactId>zookeeper</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<!--添加zookeeper3.4.9版本-->
<dependency>
  <groupId>org.apache.zookeeper</groupId>
  <artifactId>zookeeper</artifactId>
  <version>3.4.9</version>
</dependency>

4.2 修改 boostrap.yml 配置文件

server:
  port: 80
spring:
  application:
    name: zkcloud-consumer
  cloud:
  #注册到zookeeper地址
    zookeeper:
      connect-string: 192.168.111.144:2181

4.3 主启动类上不需要添加额外注解

4.4 编写业务类,调用提供者接口

@Configuration
public class ApplicationContextBean{
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}
@RestController
public class ComsumerZKController{
    public static final String INVOKE_URL = "http://zkcloud-provider";

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping(value = "/consumer/zk")
    public String paymentInfo(){
        String result = restTemplate.getForObject(INVOKE_URL+"/provider/zk", String.class);
        System.out.println("消费者调用提供者获取服务--->result:" + result);
        return result;
    }
}

5. Dubbo 使用 Zookeeper 作为注册中心


最后

\color{blue}{\rm\small{新人制作,如有错误,欢迎指出,感激不尽!}}

\color{blue}{\rm\small{欢迎关注我,并与我交流!}}

\color{blue}{\rm\small{如需转载,请标注出处!}}

上一篇 下一篇

猜你喜欢

热点阅读