服务启动后向Eureka注册,Eureka Server会将注册信息向其他Eureka Server进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中取,完成一次调用。
刚刚我们了解到 Eureka Server会将注册信息向其他Eureka Server进行同步 那么我们得声明有哪些server呢?
这里 假设我们有3个Eureka Server 如图:
他们之间的关系就是两两注册,简单来说就是自己向其他2个Eureka注册中心注册,如下图:
这里 方便理解集群 我做了一个域名的映射(条件不是特别支持我使用三台笔记本来测试。。。) 至于域名怎么映射的话 这里简单提一下吧 修改你的hosts文件(win10的目录在C:\Windows\System32\drivers\etc 其他系统的话自行百度一下把)附上我的hosts文件:
127.0.0.1 eureka3000.com
127.0.0.1 eureka3001.com
127.0.0.1 eureka3002.com
接下按照搭建单个Eureka注册中心的步骤在搭建Eureka3001,Eureka3002两个模块,pom文件都是一样的,我这里就省略了。。。
重点是配置,我这里直接贴出3个Eureka注册中心的配置文件:
server:
port: 3000
eureka:
server:
enable-self-preservation: false #关闭自我保护机制
eviction-interval-timer-in-ms: 4000 #设置清理间隔(单位:毫秒 默认是60*1000)
instance:
hostname: eureka3000.com
client:
serviceUrl:
defaultZone: http://eureka3001.com:3001/eureka,http://eureka3002.com:3002/eureka #将自己当成服务注册到其他注册中心
spring:
application:
name: eureka-server-cluster #设置服务名
server:
port: 3001
eureka:
server:
enable-self-preservation: false #关闭自我保护机制
eviction-interval-timer-in-ms: 4000 #设置清理间隔(单位:毫秒 默认是60*1000)
instance:
hostname: eureka3001.com
client:
serviceUrl:
defaultZone: http://eureka3000.com:3000/eureka,http://eureka3002.com:3002/eureka #将自己当成服务注册到其他注册中心
spring:
application:
name: eureka-server-cluster #设置服务名
server:
port: 3002
eureka:
server:
enable-self-preservation: false #关闭自我保护机制
eviction-interval-timer-in-ms: 4000 #设置清理间隔(单位:毫秒 默认是60*1000)
instance:
hostname: eureka3002.com
client:
serviceUrl:
defaultZone: http://eureka3001.com:3001/eureka,http://eureka3000.com:3000/eureka #将自己当成服务注册到其他注册中心
spring:
application:
name: eureka-server-cluster #设置服务名
根据上面的配置,原来我们搭建单机版的只是将自己作为一个服务注册中心供其他服务来注册,而集群版则是每注册中心将自己当成一个服务注册到其他2个注册中心。
我们可以依次启动3个注册中心,我选取其中一个:eureka3000.com:3000,
可以看到其他2个节点都已注册上来,并且也显示了当前有3个实例注册在Eureka上。你查看另外2个地址也能看到类似的界面。
这里我就不再搭建了,直接使用上一篇文章搭建的User客户端。
其实注册并没有什么区别,唯一需要修改的地方就是配置文件,如下:
server:
port: 5000
eureka:
client:
serviceUrl:
defaultZone: http://eureka3000.com:3000/eureka,http://eureka3001.com:3001/eureka,http://eureka3002.com:3002/eureka
instance:
instance-id: user-1 #此实例注册到eureka服务端的唯一的实例ID
prefer-ip-address: true #是否显示IP地址
leaseRenewalIntervalInSeconds: 10 #eureka客户需要多长时间发送心跳给eureka服务器,表明它仍然活着,默认为30 秒 (与下面配置的单位都是秒)
leaseExpirationDurationInSeconds: 30 #Eureka服务器在接收到实例的最后一次发出的心跳后,需要等待多久才可以将此实例删除,默认为90秒
spring:
application:
name: server-user #此实例注册到eureka服务端的name
可以看到我只是修改了注册地址,原来只写了一个地址,这次把集群的3个地址都写了上去,但是不是代表他会注册三次,因为我们eureka server的注册信息是同步的,这里只需要注册一次就可以了,但是为什么要写三个地址呢。因为这样就可以做到高可用的配置:打个比方有3台服务器。但是突然宕机了一台, 但是其他2台还健在,依然可以注册我们的服务,换句话来讲, 只要有一台服务还建在,那么就可以注册服务。
我们启动user客户端,看效果如下:
我们可以看到user服务也已经注册上来了,大家自行搭建的时候可以看看其他2个节点,这里我就不演示了,只要正确的话,任何一个节点上都会有该客户端的信息。