服务发现组件、服务提供者、服务消费者三者间的关系如下:
- 各个微服务在启动时,将自己的网络地址等信息注册到服务发现组件中,服务发现组件存储这些信息
- 服务消费者可以从服务发现组件查询服务提供者的网络地址,并使用该地址服务提供者的接口
- 各个微服务与服务发现组件使用一定的机制(心跳机制)通信。服务发现组件若长时间无法与某微服务实例通信,就会注销该服务实例。
服务发现组件具备以下功能
- 服务注册表:是服务发现组件的核心,提供查询API和管理API
- 服务注册与服务发现
- 服务检查
Spring Cloud提供的服务发现组件有Eureka、Consul、ZooKeeper等
Eureka 包含两个组件:Eureka Server和Eureka Client
- Eureka Server提供服务发现能力,各个微服务启动时会向Eureka Server注册自己的信息(如IP、端口号、微服务名称等)
- Eureka Client是一个java客户端,用于简化与Eureka Server的交互
- 微服务启动后会周期性(默认30S)地想Eureka Server发送心跳以续约自己的“租期”
- 如何Eureka Server在一定时间内没有接收到某个微服务的心跳,Eureka Server将注销该实例(默认90S)
- 默认情况下Eureka Server也是Eureka Client,多个Eureka Server实例互相之间通过复制的方式来实现服务注册表中数据的同步