写点什么

微服务治理:CloudConsul 和 ZooKeeper

  • 2021 年 11 月 12 日
  • 本文字数:2686 字

    阅读完需:约 9 分钟

  • 服务注册:在一个微服务架构中,通常会提供一个注册中心,每一个微服务实例都会注册到注册中心。

  • 服务发现:在服务通信中,每个微服务实例都通过注册中心发现其他微服务实例,通过向注册中心拉取其他微服务实例的信息(包括 host、端口等),实现服务间的相互访问。


在 Spring Cloud 大家庭中,除了 Eureka,我们还可以使用 Spring Cloud Consul 和 Spring CloudZooKeeper 来实现服务治理。接下来,我将分别对其进行介绍。


Spring Cloud Consul 的使用


======================


Spring Cloud Consul 是一个服务发现与配置管理工具,它是一款分布式、高可用、扩展性极强的框架。



Spring Cloud Consul 提供了以下功能。


  • 服务发现:Consul 通过 DNS 或 HTTP 接口使注册自己和发现其他服务变得简单,它也支持注册外部服务,如 SaaS 提供商。

  • 健康检查:健康检查可以使 Consul 快速通知操作者集群中发现的问题,与服务发现的集成可以防止将通信路由到不健康的主机,并启用服务级别的断路器。

  • Key-Value 存储:灵活的 Key-Value 存储允许存储动态配置、功能标记、协调、领导人选择等,简单的 HTTPAPI 使它在任何地方都能很容易地被使用。

  • 多数据中心:Consul 是为数据中心而构建的,可以支持任意数量的区域,而不需要复杂的配置。

  • 服务细分:Consul Connect 允许使用自动 TLS 加密和基于身份的授权进行安全的服务到服务通信。


本节中,将详细介绍 Consul 的集成。


Consul 的安装与部署


Consul 的安装比较简单,从官网https://www.consul.io/downloads.html下载对应操作系统版本即可,它是一个 ZIP 格式的压缩包。下载完成后,解压该压缩包,你将获得一个可执行文件 consul.exe,打开 cmd 命令行,进入 consul.exe 所在目录,执行以下命令:


consul agent -dev


可以启动 consul,如图 13-1 所示。



图中命令 agent 为启动一个 consul 代理,可通过 consul agent -h 查看 agent 命令的所有参数含义,表 13-1 列举了其包含的部分参数列表:




启动完成后,浏览器访问 localhost:8500,可以看到图 13-2 所示的界面。



Spring Cloud 集成 Consul


Consul 和 Eureka 不同,Eureka 需要我们自己实现注册中心,而 Consul 本身就是一个注册中心,上节启动的 consul agent 就是一个注册中心,因此,我们只需要在客户端集成 Consul 即可。


(1)新建一个工程,命名为 spring-cloud-consul,在 pom.xml 新增以下依赖:


<dependency>


<groupId>org.springframework.cloud</ groupId>


<artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency>


<dependency>


<groupId>org.springframework.cloud</groupId>


<artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency>


<dependency>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-starter-actuator</ artifactId></dependency>


<dependency>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-starter-web</ artifactId>


</dependency>


其中,spring-cloud-starter-consul-discovery 为 Spring Cloud Consul 的服务发现模块。由于这个工程也会进行健康检查,所以也需要引入 actuator 模块,而 spring-boot-starter-web 模块必须引入,否则可能无法启动工程。


(2)新增配置文件 application.yml,并编写以下内容:


spring:


application:


name: consul-clientcloud :


consul:


host: 127.8.8.1port: 8508


discovery:


serviceName: ${spring.application.name}healthCheckPath: /actuator/health


healthCheckInterval: 5s


instanceId: {vcap.application.instance_id;


{spring.application.instance_id: {random.value}}}


server:


port: 8080


在上述配置中,spring.cloud.consul 就是 Consul 的基本配置,其中,host 和 port 指定 Consul 注册中心的 P 和端口,即 13.2.1 节浏览器访问的地址; serviceName 为客户端服务名; healthCheckPath 为健康检查地址,本示例采用的是 Actuator,因此指定为/actuator/health 端点; healthCheckInterval 为健康检查间隔时间,本示例为 5 秒,即每隔 5 秒会调用健康检查端点; instanceId 为实例服务,它是唯一的,服务发现都是通过 instanceId 来进行的。


(3)新建启动类(该类和前面介绍的启动类代码一致,此处略)。


(4)启动工程并访问 localhost:8500,可以看到客户端被注册到 Consul 了,且每隔 5 秒会进行一次健康检查,如图 13-3 所示。



Spring Cloud ZooKeeper 的使用


=========================


ZooKeeper 是一个分布式的应用程序协调服务,是 Apache Hadoop 的一个子项目,最初主要是用于提供 Hadoop 和 HBase 的调度服务,能够解决 Hadoop 中统一命名、配置维护、同步服务等问题。



在微服务流行以后,ZooKeeper 开始被人们重视,大家发现通过 ZooKeeper 也可以解决微服务中的服务治理问题。在比较流行的微服务框架中,Dubbo 和 Spring Cloud 都可以用 ZooKeepr 作为服务治理框架,尤其是 Dubbo,一般都是通过 ZooKeeper 实现服务治理的。


ZooKeeper 的安装和部署


ZooKeeper 的安装和部署也比较简单,首先从官网https://www-eu.apache.org/distzookeeper/stable中下载 ZooKeeper 的稳定版,然后解压进入 ZooKeeper 根目录的 conf 文件夹,可以看到一个名叫 zoo_sample.cfg 的文件,将其命名为 zoo.cfg 并返回上一级目录,最后进入 bin 文件夹,双击 zkServer.cmd 文件,就可启动 ZooKeeper。


ZooKeeper 的默认启动端口为 2181,我们可以通过修改 zoo.cfg 来修改启动端口,在 zoo.cfg 修改下面配置即可:


clientPort=2182


当然,除了修改默认端口外,我们还可以其他参数,表 13-2 列举了 ZooKeeper 的主要参数配置。



Spring Cloud 集成 ZooKeeper


Spring Cloud 集成 ZooKeeper 的步骤如下。


(1)新建一个项目,命名为 spring-cloud-zookeeper,在其 pom.xml 文件中添加如下代码:


<parent>


<groupId>org.springframework.boot</grou


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


pId>


<artifactId>spring-boot-starter-parent< / artifactId><version>2.日.3.RELEASE</version>


<relativePath/>


</parent>


<properties>


<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>


<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version>


<lombok .version>1.18.B</ lombok . version></properties>


<dependencyManagement>


<dependencies>


<dependency>


<groupId>org.springframework.cloud</groupId>


<artifactId>spring-cloud-dependencies</artifactId><version>Finchley.RELEASE</version>


<type>pom</type>


<scope>import</scope></ dependency>


</ dependencies></dependencyManagement><dependencies>


<dependency>

评论

发布
暂无评论
微服务治理:CloudConsul和ZooKeeper