配置Eureka的高可用

我们重新开一个工程,将microservice-discovery-eureka工程复制一个并重命名microservcie-discovery-eureka-ha,并修改pom.xml和.project中工程名。

在IDE中,我们导入这个工程,接下来重点来了。

1) 配置文件application.yml 清空内容,并写入如下内容:

spring:

application:

name: eureka-server-ha


​server:​​​​port: 8762​ ​​​spring:​​​​profiles: peer1​ ​​​eureka:​​​​instance:​ ​​​hostname: peer1​ ​​​instance-id: ${spring.application.name}????{server.port}​ ​​​client:​ ​​​serviceUrl:​ ​​​defaultZone: http://peer2:8763/eureka/,http://peer3:8764/eureka/​


​server:​​​​port: 8763​ ​​​spring:​​​​profiles: peer2​ ​​​eureka:​​​​instance:​ ​​​hostname: peer2​ ​​​instance-id: ${spring.application.name}????{server.port}​ ​​​client:​ ​​​serviceUrl:​ ​​​defaultZone: http://peer1:8762/eureka/,http://peer3:8764/eureka/​


​server:​​​​port: 8764​ ​​​spring:​​​​profiles: peer3​ ​​​eureka:​​​​instance:​ ​​​hostname: peer3​ ​​​instance-id: ${spring.application.name}????{server.port}​ ​​​client:​ ​​​serviceUrl:​ ​​​defaultZone: http://peer1:8762/eureka/,http://peer2:8763/eureka/​



<

强调:”—”必须要有,用来隔开每个服务。在上面,我配置了三个服务,并让他们分别注册另外两个Eureka Server。还有我们这里配置了hostname,那我们需要配置hosts。

因为,比如启动peer1时,我们给peer1配置了peer2、peer3的Eureka Server,那么peer1在启动时就回去找对应的peer2、peer3进行注册,因为peer2、peer3还没有启动,所有就会报错。

好,将三个服务都启动之后,我们用浏览器分别访问这三个Eureka Server,会发现DS Replicas有另两个Eureka Server的副本,在Instance currently registered with Eureka有这三个服务的实例。

这里提一个问题:为什么我只被另外两个服务所注册,但为什么在实例列表中还会有自己本身的实例呢?

答:在最开始时,我们就说了官网中Eureka高可用说明,官网告诉我们注册表中的实例都要发送心跳以保持注册更新。简单来说,就是各服务之间通过相互发送心跳来保持同步,所以就会在实例表中包含了自己本省的实例。

Eureka-provider-user注册Eureka Server配置

在eureka-provider-user工程的配置文件application.yml中,我们将eureka.client.service-url.defaultZone的值配置为:​​http://peer1:8762/eureka/​​ ,然后启动user工程。

发现,虽然我们只配置了user注册在peer1上,但是在peer2、peer3也会有user的实例,这也就是它们各实例之间通过发送心跳来实现注册同步的机制。