1. 概述
之前的博客的Spring cloud系列一 包含所有基本要素的完整Spring Cloud dem这一节介绍如何启动一个简单注册中心,但是这个例子有个问题注册中心为单点,一但这个节点故障,则整个服务不可用。本节我们先对Eureka进行概述,然后介绍如何对注册中心进行集群。
2. Eureka概述
2.1. Eureka分类
Spring Cloud针对服务注册与发现,进行了一层抽象,并提供了三种实现:
- Eureka
- Consul
- Zookeeper
Spring Cloud对Eureka的支持最好,本文只介绍Eureka用法。
在Eureka中,所有的Eureka服务都被称为实例(instance),这些实例又分成为两大类:
- Eureka Server: Eureka的服务端,即服务注册中心,负责维护所有实例的注册信息
- Eureka Client: Eureka的客户端,根据功能又分为两类
- a. Service Provider:服务提供方,向Eureka Server做服务注册、续约和下线等操作,注册的主要数据包括服务名、机器ip、端口号、域名等等
- b. Service Consumer:服务消费方, 向Eureka Server获取Service Provider的注册信息,并通过远程调用与Service Provider进行通信
可以将Service Provider和Service Consumer理解为角色。一个Eureka Client可以只是Service Provider,也可以只是Service Consumer,也可以同时即是Service Provider也是Service Consumer。
2.2. Eureka配置参数
理解了上节的概念,我们来对Eureka的配置参数进行理解,它的配置主要分为三类:
-
eureka.instance.*: Eureka实例注册配置项,这些是无论Eureka是做Server端,还是做Client端都需要的公共配置项。这些属性配置在类org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean中
-
eureka.server.*: Eureka做为Eureka Server才需要配置的选项,即使用eureka做注册中心时才需要配置这个选项。这些属性配置在类org.springframework.cloud.netflix.eureka.EurekaClientConfigBean中
-
eureka.client.*: Eureka做为Eureka Client才需要配置的选项,即服务需要向注册中心注册(实例做为Service Provider时)或使用注册中心中的服务(实例做为Service Consumer时)时才需要配置这些选项。这些属性配置在类org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean中
3. Eureka Server 注册中心集群
3.1. 单机Eureka Server 注册中心的配置
单机注册中心的配置见这篇博客的Spring cloud系列一 包含所有基本要素的完整Spring Cloud dem这一节
3.2 实现Eureka Server注册中心集群
Eureka官网的架构图

如上图所示,为了解决Eureka Server单点的问题,我们可以启动多个Eureka Server注册中心,并让多个Eureka Server注册中心相互注册,这样可以实现Eureka Server注册中心集群。这是一种去中心化的架构中,各个节点是平等的,每个节点都保存完整实例注册服务的信息。
参数配置
配置多注册中心和单个注册中心基本相同,唯一的不同是eureka.client.serviceUrl配置。如本节我们配置一个注册中心集群,它包含两台服务,IP和端口分别是192.168.21.4:10761和192.168.21.3:10761,则Eureka Server对应的配置是
eureka:
client:
# 设置eureka服务器所在的地址,查询服务和注册服务都需要依赖这个地址
serviceUrl:
# defaultZone: http://127.0.0.1:10761/eureka/
# 设置eureka服务器所在的地址,可以同时向多个服务注册服务
defaultZone: http://192.168.21.3:10761/eureka/,http://192.168.21.4:10761/eureka/
如果Eureka client要使用注册中心集群,其它配置和使用单机注册中心相同,只需要修改defaultZone配置:
eureka:
client:
# 设置eureka服务器所在的地址,查询服务和注册服务都需要依赖这个地址
serviceUrl:
# defaultZone: http://127.0.0.1:10761/eureka/
# 设置eureka服务器所在的地址,可以同时向多个服务注册服务
defaultZone: http://192.168.21.3:10761/eureka/,http://192.168.21.4:10761/eureka/
“Eureka官网的架构图”除了介绍注册中心外,还涉及服务实例的注册、续约、下线等功能,我们在下节在介绍。
4. 代码
以上的详细的代码见下面
github代码,请尽量使用tag v0.4,不要使用master,因为我不能保证master代码一直不变