一,创建高可用的eureka sever
1. 创建eureka server
2.配置application.properties 和 注解@EnableEurekaServer
#注册的应用名称
spring.application.name=eureka-server
#eureka默认端口
server.port=8761
#eureka.instance.hostname=eureka1
#注册的eureka服务端地址
eureka.client.service-url.defaultZone=http://localhost:8762/eureka
#表示当前服务不注册到eureka
#eureka.client.register-with-eureka=false
#表示不去eurekasever获取服务地址
#eureka.client.fetch-registry=false
# 关闭自我保护模式
#eureka.server.enable-self-preservation=false
#自我保护因子阈值 默认0.85
#eureka.server.renewal-percent-threshold=0.5
3.高可用,再创建一个eureka server,
配置application.properties 和 注解@EnableEurekaServer
spring.application.name=eureka-server-replica
server.port=8762
#eureka.instance.hostname=eureka2
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
二,创建eureka client
- 创建product,coustom
2. 配置application.properties
service provider
spring.application.name=eureka-product-service
server.port=8080
#注册的eureka服务端地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka,http://localhost:8762/eureka
service consumer
spring.application.name=eureka-user-service
server.port=8081
eureka.client.service-url.defaultZone=http://localhost:8761/eureka,http://localhost:8762/eureka
3.service consumer代码
@RestController
public class TestController {
@Autowired
RestTemplate restTemplate;
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
@GetMapping("/product/{id}")
public String getTest(@PathVariable String id){
return restTemplate.getForObject("http://eureka-product-service/product/"+id,String.class);
}
}
4. service provider 代码
@RestController
public class ProductController {
@GetMapping("/product/{id}")
public String getTest(@PathVariable String id){
return "Success=>>>>"+id;
}
}
三.访问页面
主备eureka server
5.调用
三:QA
System Status
Environment 指定环境,默认为test, 实际使用过程中,可以不用更改
Data center 数据中心
Current time 当前系统时间
Uptime 已运行时长
Lease expiration enabled 是否启用租约过期, 自我保护机制关闭时,该值默认是true, 自我保护机制开启之后为false
Renews threshold server 期望在每分钟中收到的心跳次数
Renews (last min) 上一分钟内收到的心跳次数
DS Replicas
Instances currently registered with Eureka 当前注册到服务注册中心内的服务
No instances available 没有服务被发现
General Info
total-avail-memory
总共可用的内存
environment 环境名称,默认test
num-of-cpus CPU个数
current-memory-usage 当前已经使用内存的百分比
server-uptime 服务在线时间
registered-replicas 相邻集群复制节点
unavailable-replicas 不可用的集群复制节点
available-replicas 可用的相邻集群复制节点
Instance Info
ipAddr 实例IP地址
status 实例状态
Eureka信息面板的红字提醒
Spring Eureka 服务注册中心在三种情况下会出现红色加粗的字体提示:
1)自我保护机制开启时(enable-self-preservation: true):
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
2)自我保护机制关闭时(enable-self-preservation: false):
RENEWALS ARE LESSER THAN THE THRESHOLD. THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
3)自我保护机制关闭了,但是一分钟内的续约数没有达到85%,可能发生了网络分区,会有如下提示:
THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
四.eureka server 自我保护机制
案例一:
Renews threshold 5
Renews (last min) 4
计算公式:
客户端的续约间隔默认30s
Renews (last min) 正常情况下:
=服务总数 * 每分钟续约数量(60s/客户端的续约间隔)
= 3 * 2 = 6
案例二:
Renews threshold 6
Renews (last min) 8
Renews threshold= 服务总数 * 每分钟续约数量(60s/客户端的续约间隔(默认30s))* 自我保护的续约百分比阈值因子
= 4 * 2 * 0.85 = 6.8 = 6
Renews (last min) = 服务总数 * 每分钟续约数量(60s/客户端的续约间隔(默认30s)) = 4 * 2 = 8
是否开启保护机制
和
自我保护的续约百分比阈值因子 可以修改
#关闭自我保护模式
eureka.server.enable-self-preservation=false
#自我保护的续约百分比阈值因子
eureka.server.renewal-percent-threshold=0.5