返回介绍

5.2 服务注册与发现

发布于 2025-04-21 20:58:44 字数 2966 浏览 0 评论 0 收藏

微服务应用通常是基于分布式集群部署的,当集群实例达到一定数量时,就不得不做服务治理了。将微服务实例集中管理,需要一个服务注册中心与服务发现组件。微服务实例启动后自动注册到注册中心组件中,注册中心维护与实例的连接关系,所有的实例列表用于服务发现。服务发现可以分为客户端模式与服务端模式。客户端模式首先从服务注册中心获取服务列表,然后在客户端进行服务调用;服务端模式则直接向服务注册中心发送请求,服务注册中心直接调用服务实例并返回结果。本节主要介绍服务注册与发现组件 Eureka 和 Consul 的功能。

5.2.1 Eureka 组件简介

Eureka 是 Netflix 公司开源的用于服务注册和发现的框架。从 2018 年 7 月份开始,Netflix 宣布不再维护 Eureka 开源代码。但是 Spring Cloud 集成了 Eureka 到子项目 spring-cloud-netflix 中,以实现 Spring Cloud 的服务发现功能。

Eureka 分为 Eureka Server 端与 Eureka Client 端。Eureka Server 端提供服务注册功能,微服务启动后,调用注册接口进行服务注册;Eureka Server 端还会维护所有可用的服务节点信息,同时提供页面,可以查看注册过的服务。Eureka Client 端提供与 Eureka Server 端的交互,它内嵌在微服务中,向 Eureka Server 端发送心跳检测,提供注册和续租等服务。

Eureka 架构如图 5.12 所示。

092-1

图 5.12 Eureka 架构

下面列举一个简单的 Eureka 使用示例。

(1)创建一个 eureka-server 工程,应用需要依赖 spring-cloud-starter-netflix-eureka-server 包,修改配置文件如下:

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    serviceUrl:
      defaultZone: http://localhost:8080/eureka/

(2)在启动类中添加注解 @EnableEurekaServer,然后启动工程。

(3)新建客户端工程 eureka-client,应用需要依赖 spring-cloud-starter-netflix-eureka-client 包,修改配置文件如下:

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8080/eureka/

(4)在启动类中添加注解 @EnableDiscoveryClient,然后启动工程,访问 Eureka 界面即可看到客户端已经注册到服务端了。

5.2.2 Consul 组件简介

Consul 是 HashiCorp 公司推出的开源软件,也可以实现服务注册与服务发现的功能。Consul 主要有以下几种特性:

  • 服务发现:服务通过 Consul 客户端注册到 Consul 服务端,然后可以通过 Consul 服务端进行服务发现查询。
  • 健康检查:Consul 客户端可以对服务提供相应的健康检查。
  • 数据存储:Consul 提供了 Key/Vaule 存储方式,应用程序可以设置相关的配置数据。
  • 多数据中心:不依赖其他第三方工具即可使用多数据中心。

Consul 可分为 Server 端和 Client 端两种角色。Server 端保存配置、选举和维护状态等复杂的逻辑,Client 端负责转发请求到服务端。

Consul 使用时需要自己安装,步骤如下:

(1)在官网下载 Consul,网址为 https://www.consul.io/downloads.html,然后需要在 PATH 环境变量中添加安装目录。

(2)执行 consul --version 命令查看版本,本例使用的是 1.8.4 版本。

(3)想使用 Consul,需要启动 Agent。有两种启动方式,一种是 server 方式,一种是 client 方式。执行命令如下:

consul agent -server -ui -bootstrap-expect=3 -data-dir=/data/consul
-node=server-1 -client=0.0.0.0 -bind=127.0.0.1 -datacenter=dc1

(4)启动 Agent 后,访问 Consul 的后台管理页面 http://localhost:8500/,如图 5.13 所示。

093-1

图 5.13 Consul 后台管理页面

(5)Spring Boot 整合 Consul 需要依赖 spring-cloud-starter-consul-discovery 包。另外,spring-boot-starter-actuator 可以提供健康检查。

(6)修改 Spring Boot 项目的 application.yml 配置文件如下:

spring:
  cloud:
    consul:
      host: 127.0.0.1
      port: 8500
      discovery:
        service-name: ${spring.application.name}
        tags: test=consul
        healthCheckPath: /health
        healthCheckInterval: 15s

(7)添加 @EnableDiscoveryClient 注解完成注册,此时可以通过带有负载均衡的 LoadBalancerClient 客户端获取实例。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。