配置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的实例,这也就是它们各实例之间通过发送心跳来实现注册同步的机制。