Eureka的自我保护机制
出厂默认,自我保护机制是开启的
eureka.server.enable-self-preservation = true
我们可以禁用
server: enable-self-preservation: false eviction-interval-timer-in-ms: 2000
当Eureka一定时间内没有检测到服务的心跳或者短时间内丢失了多个服务,那么服务端就会认为是网络故障或者是一系列i意外的发生
此时不应该注销任何的服务。同时新的服务也可以继续进来,
设计哲学
好死不如赖活着
Eureka宁可保护错误的服务信息,也不会去轻易的注销服务
小测试
我们在8001的配置文件中追加一些配置
启动项目之后
过五秒关闭8001
你会发现两秒就消失了
配置生效
Eureka集群原理
Eureka集群原理说明:
搭建注册中心集群
参考我们的注册中心7001,搭建一个一模一样的注册中心
在搭建之前请去修改一下映射文件,
找到C:\Windows\System32\drivers\etc路径下的hosts文件,修改
因为我们之前使用都是一个单机的项目,我们要集群那么不能使用 localhost,他会被识别成一样的路径
我们修改一些映射
如:
127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com
本质还是localhost但是却是两个不一样的映射
导入和7001相同的依赖
之后分别修改
7001配置文件
server: port: 7001 eureka: instance: hostname: eureka7001.com #eureka服务端的实例名字 client: register-with-eureka: false #表识不向注册中心注册自己 fetch-registry: false #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务 service-url: defaultZone: http://eureka7002.com:7002/eureka/ #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
7002
server: port: 7002 eureka: instance: hostname: eureka7002.com #eureka服务端的实例名字 client: register-with-eureka: false #表识不向注册中心注册自己 fetch-registry: false #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务 service-url: defaultZone: http://eureka7001.com:7001/eureka/ #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
集群其实就是一句话:相互守望,
之后我们还要修改一下 服务提供者 8001的注册地址,他现在同时需要注册到两个注册中心去
service-url: defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版
测试:
先要启动EurekaServer,7001/7002服务
再要启动服务提供者provider,8001服务
再要启动消费者,80
http://localhost/consumer/payment/get/1
**注意:**记得修改服务的端口号,避免两个模块都是用7001导致服务异常
查看结果即可
支付服务提供者8001集群环境构建
同上搭建一个除了端口号和8001一抹一样的模块
cloud-provider-payment8002
配置文件修改一个端口号即可
之后修改业务代码
因为是集群,所以之后我们要做负载均衡
我们需要修改接口业务代码
8001:
8002同上
我们通过获取不同配置文件中的端口号来判断调用的是哪一个模块
之后去修改消费者80的业务代码
= 订单服务访问地址不能写死 =
改成我们的服务提供者集群的服务别名
public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";
PS:一定要修改,不然无法实现负载均衡,
之后去给config中的resttemplate的bean上加上一个注解
@LoadBalanced注解赋予RestTemplate负载均衡的能力
之后就是可以跑项目来测试了
步骤:
先要启动EurekaServer,7001/7002服务
再要启动服务提供者provider,8001/8002服务
http://localhost/consumer/payment/get/1
负载均衡效果达到,8001/8002端口交替出现
Ribbon和Eureka整合后Consumer可以直接调用服务而不用再关心地址和端口号,且该服务还有负载功能了