Spring Cloud的小改进(五)

时间:2023-03-09 02:28:15
Spring Cloud的小改进(五)

1、在Eureka中不能看到具体服务的实例信息;

问题点:服务注册到 Eureka 之后,可以看到在 “Status” 显示的服务信息不明确(不知道具体的服务名等信息),如下图所示:

Spring Cloud的小改进(五)

解决方法:

在服务的application.yml配置文件中,增加 instance-id 的信息,如下图所示:

eureka:
client: # 客户端注册进eureka内
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
instance:
instance-id: microservicecloud-provider-dept-8001

Spring Cloud的小改进(五)

重启 Eureka 和 服务,然后打开:http://localhost:7001,可以看到如下所示的页面,“Status”中显示的是 instance-id 中定义的名字;

Spring Cloud的小改进(五)

2、将鼠标放在“Status"中,页面的左下角显示链接的地址不明确(未显示IP)

Spring Cloud的小改进(五)

解决方法:

  将服务的 instance 下的 prefer-ip-address 设置为 true; (访问路径可以显示IP),如下所示:

Spring Cloud的小改进(五)

重启服务,接着打开eureka的页面,鼠标放在”Status“上,如下所示(显示IP)

Spring Cloud的小改进(五)

3、打开Eureka页面,点击注册的服务的“Status”的超链接之后报错

Spring Cloud的小改进(五)

解决方法:

(1)修改注册服务(microservicecloud-provider-dept-8001) 的pom.xml文件,增加如下依赖:

<!-- actuator监控信息完善 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

(2)总的父工程(microservicecloud)修改pom.xml文件,添加构建build信息

<build>
<finalName>microservicecloud</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimit>$</delimit>
</delimiters>
</configuration>
</plugin>
</plugins>
</build>

(3)打开注册服务(microservicecloud-provider-dept-8001) 的application.yml文件,增加如下信息:

info:
app.name: yufeng-microservicecloud
company.name: www.yufeng.com
build.artifactId: $project.artifactId$
build.version: $project.version$

Spring Cloud的小改进(五)

重启注册的服务,点击之后得到如下信息

Spring Cloud的小改进(五)

4、Eureka的自我保护机制:

默认情况下,若EurekaServer 在一定时间内没接收到某个微服务实例的心跳,Eureka将会注销该实例(默认90秒);

当网络故障发生时,微服务和Eureka服务是无法正常通信的,以上行为可能就变得很危险(实际上微服务本身是健康的,此时不应该注销这个服务);

Eureka通过“自我保护模式”来解决这个问题:当EurekaServer节点在短时间间内丢失过多客户端时(可能是网络故障),那么这个节点就会进入自我保护模式。一旦进入自我保护模式,EurekaServer就会保护服务注册表中的信息,不再删除服务注册表中的数据(即不会注销任何微服务)。当网络故障恢复后,该EurekaServer节点会自动退出自我保护模式。

Eureka的自我保护机制:某个时刻一个微服务不可用了,Eureka不会立刻清理,依旧会对该服务的信息进行保存;

Spring Cloud的小改进(五)

Spring Cloud的小改进(五)

在配置文件中使用 eureka.server.enable-self-preservation = false ,禁用自我保护模式

Spring Cloud的小改进(五)

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.

Spring Cloud的小改进(五)