【SpringCloud】注册中心Eureka是什么呢,先从理论认识Eureka
作者:互联网
一、首先为什么会有Eureka呢?
是因为,服务提供者对外提供服务,需要对外暴露自己的地址,而服务消费者需要记录服务提供者的地址。一但地址发生变化,需要人为管理地址,为开发测试及上线带来极大的困难。所有有了Eureka,它可以管理这些服务。
二、Eureka是什么呢?
Eureka负责管理、记录服务提供者的信息,服务调用者把自己的需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你,它实现了服务的自动注册、发现、状态监控。
简单来说,就是服务提供者将服务放到Eureka里,Eureka再把相应的服务(也就是服务调用者需要的服务)给服务调用者。
其架构原理图如下:
- Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址
- 提供者:启动后向Eureka注册自己信息(地址,提供什么服务)
- 消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
- 心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态
三、Eureka是怎么工作的呢?
1、服务提供者
服务提供者要向EurekaServer注册服务,并且完成服务续约等工作。
(1)服务注册
服务提供者在启动时,会检测配置属性中的eureka.client.register-with-erueka,若它为ture,代表将自己的信息注册到EurekaServer。
则会向EurekaServer发起一个Rest请求,并携带自己的元数据信息,Eureka Server会把这些信息保存到一个双层Map结构中。第一层Map的Key就是服务名称,第二层Map的key是服务的实例id。
(2)服务续约
在注册服务完成以后,服务提供者会维持一个心跳(定时向EurekaServer发起Rest请求),告诉EurekaServer:“我还活着”。这个我们称为服务的续约(renew)
其配置以及对应的意义
eureka:
client:
register-with-eureka: true # 是否注册自己的信息到EurekaServer,默认是true
fetch-registry: false # 是否拉取其它服务的信息,默认是true
service-url: # EurekaServer的地址,现在是自己的地址,如果是集群,需要加上其它Server的地址。
defaultZone: http://127.0.0.1:10086/eureka
instance:
prefer-ip-address: true # 当调用getHostname获取实例的hostname时,返回ip而不是host名称
ip-address: 127.0.0.1 # 指定自己的ip信息,不指定的话会自己寻找
lease-expiration-duration-in-seconds: 90 # 服务失效时间,默认值90秒(90秒即过期)
lease-renewal-interval-in-seconds: 30 # 服务续约(renew)的间隔,默认为30秒(也就是30秒一次心跳)
status一列
- UP(1):代表现在是启动了1个示例,没有集群
- DESKTOP-8SJ4MMQ:producer-service:8081:示例的名称
默认格式是:${hostname} + ${spring.application.name} + ${server.port}
通过instance-id属性来修改它的构成
eureka:
instance:
instance-id: ${spring.application.name}:${server.port}
2、服务消费者
当服务消费者启动是,会检测eureka.client.fetch-registry参数的值,如果为true,代表拉取其它服务的信息,则会从Eureka Server服务的列表只读备份,然后缓存在本地。默认是每隔30秒会重新获取并更新数据。也可以自己设置时间。
eureka:
client:
registry-fetch-interval-seconds: 30
3、失效剔除
有些时候,我们的服务提供方并不一定会正常下线,可能因为内存溢出、网络故障等原因导致服务无法正常工作。Eureka Server需要将这样的服务剔除出服务列表。因此它会开启一个定时任务,每隔60秒对所有失效的服务(超过90秒未响应)进行剔除。
可以通过eureka.server.eviction-interval-timer-in-ms参数对其进行修改,单位是毫秒
4、自我保护
这是触发了Eureka的自我保护机制。当一个服务未按时进行心跳续约时,Eureka会统计最近15分钟心跳失败的服务实例的比例是否超过了85%。在生产环境下,因为网络延迟等原因,心跳失败实例的比例很有可能超标,但是此时就把服务剔除列表并不妥当,因为服务可能没有宕机。Eureka就会把当前实例的注册信息保护起来,不予剔除。生产环境下这很有效,保证了大多数服务依然可用。
自我保护模式可以自己设置,可设为关闭
eureka:
server:
enable-self-preservation: false # 关闭自我保护模式(缺省为打开)
eviction-interval-timer-in-ms: 1000 # 扫描失效服务的间隔时间(缺省为60*1000ms)
标签:服务,SpringCloud,eureka,地址,EurekaServer,注册,服务提供者,Eureka 来源: https://blog.csdn.net/cxh6863/article/details/105833070