如何实现?
EurekaServer作为集群,是高可用的Eureka中心。
Eureka服务之间会互相注册为服务,服务提供者注册到Eureka Server集群中的一个节点时,该节点会把服务的信息同步给集群的所有节点,从而实现数据同步。所以客户端拉取到Eureka Server集群中的完整的Server信息
搭建高可用的EurekaServer
创建springboot项目,创建两份配置文件application-localserver1.yml和 application-localserver2.yml 启动两次并分别指定激活环境。
#应用名称,会在eureka中显示
spring:
application:
name: eureka-server
server.port: 8001
eureka:
instance:
hostname: localserver2
client:
fetch-registry: true
register-with-eureka: true
registry-fetch-interval-seconds: 30
#eureka的服务器地址
#如果是集群的话,需要指定其他服务器的地址
service-url:
defaultZone: http://localserver2:8002/eureka/
#应用名称,会在eureka中显示
spring:
application:
name: eureka-server
server.port: 8002
eureka:
instance:
hostname: localserver1
client:
fetch-registry: true
register-with-eureka: true
registry-fetch-interval-seconds: 30
service-url:
defaultZone: http://localserver1:8001/eureka/
生产者 因为EurekaServer不止一个,因此注册服务的时候,service-url参数需要变化
server:
port: 8003
spring:
application:
name: lst-eureka-client
eureka:
instance:
prefer-ip-address: true
#服务失效时间;eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,超过时间内若没收到下一次心跳,则移除该instance
#该值至少应该大于 lease-renewal-interval-in-second
lease-expiration-duration-in-seconds: 6
#服务续约(renew);eureka client发送心跳给server端的频率默认30s。如果在lease-expiration-duration-in-seconds后server端没有收到client的心跳,则将摘除该instance。
# 除此之外,如果该instance实现了HealthCheckCallback,并决定让自己unavailable的话,则该instance也不会接收到流量。
lease-renewal-interval-in-second: 5
client:
#是否注册信息到eureka服务器以供其他服务发现,默认为false
register-with-eureka: true
#客户端是否获取eureka服务器注册表上的注册信息,默认为true
fetch-registry: true
#eurekaclient间隔多久去拉取服务注册信息,默认为30秒
registry-fetch-interval-seconds: 10
## defaultZone向多个服务注册 官网推荐使用一下方法
---
eureka:
instance:
instance-id: ${spring.application.name}:${server.port}::${random.int[0,20]}
client:
serviceUrl:
defaultZone: http://localserver2:8002/eureka/
---
eureka:
instance:
instance-id: ${spring.application.name}:${server.port}::${random.int[0,20]}
client:
serviceUrl:
defaultZone: http://localserver1:8001/eureka/
host配置
c:\windows\system32\drivers\etc
127.0.0.1 localserver1
127.0.0.1 localserver2
常用参数
#当服务消费者启动时,会检测 eureka.client.fetch-registry=true 参数的值,如果为true,则会拉取Eureka Server服务的列表只读备份,然后缓存在本地。并且每隔30秒会重新获取并更新数据。
eureka:
client:
registry-fetch-interval-seconds: 5 #默认即可
# 自我保护
eureka:
server:
enable-self-preservation: false # 关闭自我保护模式(缺省为打开)
eviction-interval-timer-in-ms: 1000 # 扫描失效服务的间隔时间(缺省为60*1000ms)
// 服务续约
#有两个重要参数可以修改服务续约的行为:
#lease-renewal-interval-in-seconds:服务续约(renew)的间隔,默认为30秒
#lease-expiration-duration-in-seconds:服务失效时间,默认值90秒
eureka:
instance:
lease-expiration-duration-in-seconds: 90
lease-renewal-interval-in-seconds: 30`
访问
http://localserver1:8001
http://localserver2:8002
参数使用
客户端
服务端
LeaseRenewalIntervalInSeconds eureka客户需要多长时间发送心跳给eureka服务器,表明它仍然活着,默认为30 秒
LeaseExpirationDurationInSeconds Eureka服务器在接收到实例的最后一次发出的心跳后,需要等待多久才可以将此实例删除,默认为90秒