Eureka做什么?
Eureka就好比是滴滴,负责管理、记录服务提供者的信息。服务调用者无需自己寻找服务,而是把自己的需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你。
同时,服务提供方与Eureka之间通过`“心跳”`机制进行监控,当某个服务提供方出现问题,Eureka自然会把它从服务列表中剔除。
这就实现了服务的自动注册、发现、状态监控。
- Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址
- 提供者:启动后向Eureka注册自己信息(地址,提供什么服务)
- 消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
- 心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态
1.创建eureka-server工程
添加依赖
启动类
注意添加@EnableEurekaServer
配置
端口号 +微服务名称+默认注册链接 自己注册自己(防止报错)
2.服务提供方
添加依赖
添加注解
注意@EnableDiscoveryClient 可以兼容不同注册中心
配置
3.服务消费方
依赖
注解
配置
注入DiscoveryClient,根据服务id获取实例,从实例中获取ip与端口
高可用Eureka
复制配置
修改配置
修改服务提供者配置
添加配置 不注册自己
默认情况下每个30秒服务会向注册中心发送一次心跳,证明自己还活着。如果超过90秒没有发送心跳,EurekaServer就会认为该服务宕机,会从服务列表中移除,这两个值在生产环境不要修改,默认即可。
但是在开发时,这个值有点太长了,经常我们关掉一个服务,会发现Eureka依然认为服务在活着。所以我们在开发阶段可以适当调小。
当服务消费者启动是,会检测`eureka.client.fetch-registry=true`参数的值,如果为true,则会从Eureka Server服务的列表只读备份,然后缓存在本地。并且`每隔30秒`会重新获取并更新数据。
生产环境中,我们不需要修改这个值。
但是为了开发环境下,能够快速得到服务的最新状态,我们可以将其设置小一点。
失效剔除和自我保护
> 失效剔除
有些时候,我们的服务提供方并不一定会正常下线,可能因为内存溢出、网络故障等原因导致服务无法正常工作。Eureka Server需要将这样的服务剔除出服务列表。因此它会开启一个定时任务,每隔60秒对所有失效的服务(超过90秒未响应)进行剔除。
可以通过`eureka.server.eviction-interval-timer-in-ms`参数对其进行修改,单位是毫秒,生成环境不要修改。
这个会对我们开发带来极大的不变,你对服务重启,隔了60秒Eureka才反应过来。开发阶段可以适当调整,比如10S
> 自我保护
这是触发了Eureka的自我保护机制。当一个服务未按时进行心跳续约时,Eureka会统计最近15分钟心跳失败的服务实例的比例是否超过了85%。在生产环境下,因为网络延迟等原因,心跳失败实例的比例很有可能超标,但是此时就把服务剔除列表并不妥当,因为服务可能没有宕机。Eureka就会把当前实例的注册信息保护起来,不予剔除。生产环境下这很有效,保证了大多数服务依然可用。
但是这给我们的开发带来了麻烦, 因此开发阶段我们都会关闭自我保护模式
负载均衡
复制配置
添加依赖
启动类添加注解
路径改为id(通过拦截器实现获取ip与端口号)
SpringBoot也帮我们提供了修改负载均衡规则的配置入口:
来源:CSDN
作者:qq_41923555
链接:https://blog.csdn.net/qq_41923555/article/details/103760858