在微服务架构中, 服务发现可以说是最为核心和基础的模块, 该模块主要用于实现各个微服务实例的自动化注册与发现. 在 Spring Cloud 的子项目中, Spring Cloud Netflix 提供了 Eureka 来实现服务的发现功能, 本节将对 Eureka 的使用进行详细讲解.
Eureka 介绍
Eureka 是 Netflix 开发的一个服务发现框架, 本身是一个基于 REST 的服务, 主要用于定位运行在 AWS(Amazon web Services)域中的中间层服务, 以达到负载均衡和中间层服务故障转移的目的. Spring Cloud 将其集成在自己的子项目 Spring CloudNetflix 中, 以实现 Spring Cloud 的服务发现功能.
Eureka 的服务发现包含两大组件: 服务端发现组件 (EurekaServer) 和客户端发现组件(Eureka Client). 服务端发现组件也被称之为服务注册中心, 主要提供了服务的注册功能, 而客户端发现组件主要用于处理服务的注册与发现. Eureka 的服务发现机制如图 4-2 所示.
从图 4-2 可以看出, 当客户端服务通过注解等方式嵌入到程序的代码中运行时, 客户端发现组件就会向注册中心注册自身提供的服务, 并周期性地发送心跳来更新服务(默认时间为 30s, 如果连续三次心跳都不能够发现服务, 那么 Eureka 就会将这个服务节点从服务注册表中移除). 与此同时, 客户端发现组件还会从服务端查询当前注册的服务信息并缓存到本地, 即使 EurekaServer 出现了问题, 客户端组件也可以通过缓存中的信息调用服务节点的服务. 各个服务之间会通过注册中心的注册信息以 REST 方式来实现调用, 并且可以直接通过服务名进行调用.
Eureka 的服务发现机制包含了 3 个角色: 服务注册中心, 服务提供者和服务消费者. 这 3 个角色之间的关系如图 4-3 所示.
在图 4-3 中, 服务注册中心即 Eureka Server, 而服务提供者和服务消费者是 Eureka Client. 这里的服务提供者是指提供服务的应用, 可以是 Spring Boot 应用, 也可以是其他技术平台且遵循 Eureka 通信机制的应用, 应用在运行时会自动地将自己提供的服务注册到 Eureka Server 以供其他应用发现.
服务消费者就是需要服务的应用, 该服务在运行时会从服务注册中心获取服务列表, 然后通过服务列表知道去何处调用其他服务. 服务消费者会与服务注册中心保持心跳连接, 一旦服务提供者的地址发生变更时, 注册中心会通知服务消费者.
需要注意的是, Eureka 服务提供者和服务消费者之间的角色是可以相互转换的, 因为一个服务既可能是服务消费者, 同时也可能是服务提供者.
来源: http://www.bubuko.com/infodetail-3122703.html