Skip to content

第3章 微服务发布与调用

本章要点

  • 认识 Eureka 框架
  • 运行 Eureka 服务器
  • 发布微服务
  • 调用微服务
  • 服务器端配置
  • 服务提供者配置
  • 搭建 Eureka 集群

本章将讲述 Spring Cloud 中 Eureka 的使用,包括在 Eureka 服务器上发布、调用微服务,Eureka 的配置以及 Eureka 集群等内容。

3.1 Eureka介绍

Spring Cloud 集成了 Netflix OSS 的多个项目,形成了 spring-cloud-netflix 项目 。 该项目包含多个子模块,这些子模块对集成的 Netflix 旗下的框架进行了封装,本节将讲述其中一个较为重要的服务管理框架: Eureka。

3.1.1 关于Eureka

Eureka 提供基于 REST 的服务,在集群中主要用于服务管理 。 Eureka 提供了基于 Java 语言的客户端组件,客户端组件实现了负载均衡的功能,为业务组件的集群部署创造了条件。使用该框架,可以将业务组件注册到 Eureka 容器中,这些组件可进行集群部署, Eureka 主要维护这些服务的列表并自动检查它们的状态 。

3.1.2 Eureka架构

一个简单的 Eureka 集群,需要一个 Eureka 服务器、若干个服务提供者 。 我们可以将业务组件注册到 Eureka 服务器中,其他客户端组件可以向服务器获取服务并且进行远程调用。 图 3-1 所示为 Eureka 的架构图 。

图 3- 1 中有两个服务器,服务器支持集群部署,每个服务器也可以作为对方服务器的客户端进行相互注册与复制。图 3- 1 中所示的三个 Eureka 客户端,两个用于发布服务,另一个用于调用服务。不管是服务器还是客户端,都可以部署多个实例 ,如此一来, 就很容易构建高可用的服务集群 。

3.1.3 服务器端

对于注册到服务器端的服务组件, Eureka 服务器并没有提供后台的存储, 这些注册的服务实例被保存在内存的注册中心,它们通过心跳来保持其最新状态,这些操作都可以在内存中完成。客户端存在着相同的机制,同样在内存中保存了注册表信息,这样的机制提升了 Eureka 组件的性能,每次服务的请求都不必经过服务器端的注册中心

3.1.4 服务提供者

作为 Eureka 客户端存在的服务提供者,主要进行以下工作:第一、向服务器注册服务;第二、发送心跳给服务器;第三、向服务器端获取注册列表。

当客户端注册到服务器时,它将会提供一些关于自己的信息给服务器端,例如自己的主机、端口、健康检测连接等 。

3.1.5 服务调用者

对于发布到 Eureka 服务器的服务,服务调用者可对其进行服务查找与调用,服务调用者也是作为客户端存在的,但其职责主要是发现与调用服务。在实际情况中,有可能出现本身既是服务提供者,又是服务调用者的情况。例如在传统的企业应用三层架构中,服务层会调用数据访问层的接口进行数据操作,它本身也会提供服务给控制层使用。

本节对 Eureka 进行了介绍,读者大概了解 Eureka 架构及各个角色的作用即可,说一千道一万,不如来个案例实际,下一节将以一个案例来展示 Eureka 的作用。

3.2 第一个Eureka应用

3.2.1 构建服务器

3.2.2 服务器注册开关

3.2.3 编写服务提供者

3.2.4 编写服务调用者

3.2.5 程序结构

3.3 Eureka集群搭建

3.3.1 本例集群结构图

3.3.2 改造服务器端

3.3.3 改造服务提供者

3.3.4 改造服务调用者

3.3.5 编写REST客户端进行测试

3.4 服务实例的健康自检

3.4.1 程序结构

3.4.2 使用Spring Boot Actuator

3.4.3 实现应用健康自检

3.4.4 服务查询

3.5 Eureka的常用配置

3.5.1 心跳检测配置

3.5.2 注册表抓取间隔

3.5.3 配置与使用元数据

3.5.4 自我保护模式

3.6 本章小结