一、eureka自我保护机制是什么?
eureka有一种自我保护机制,什么意思呢,就是当eureka注册中心检测到某个服务不可用了,并不会立马把服务注销,它会有一个等待的过程,时间大概是90s,在这90以内,eureka仍然能够保护服务的基本信息不被丢失,这样做的目的是,有可能服务崩溃了的真正原因可能是因为网络故障,比如断电了,微服务本身其实还是健康的,并不应该注销该服务。
自我保护机制是应对网络异常的安全防护措施,它让eureka集群更加健壮和稳定。
另外,在springcloud当中,可以使用eureka.server.enable-self-preservation=fase
关闭eureka的自我保护机制,但是不推荐。
二、演示步骤
1.引入库
<!-- eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<!-- 完善eureka监控信息 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
application.yaml配置
server:
port: 8001
mybatis:
type-aliases-package: com.lhh.springcloud.pojo
mapper-locations: classpath:mappers/*.xml
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
spring:
application:
name: springcloud-provider-emp
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://localhost:3306/db01
url: jdbc:mysql://localhost:3306/springcloud?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
username: root
# password: root
password: 123456
#datasource category
type: com.alibaba.druid.pool.DruidDataSource
#eureka的配置
#Eureka配置:服务注册到哪里
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
instance:
instance-id: springcloud-provider-emp-8001 #修改eureka上面的默认描述信息
prefer-ip-address: true #显示服务来自哪个ip地址
#info监控信息配置
info:
app.name: lhh-springcloud
company.name: lhh.com
debug: true
2.启动
启动springcloud-eureka-7001
、springcloud-provider-emp-8001
package com.lhh.springcloudprovideremp8001;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
/*@SpringBootApplication*/
@SpringBootApplication(exclude= {
DataSourceAutoConfiguration.class})
@MapperScan("com.lhh.springcloudprovideremp8001.dao")
@EnableEurekaClient
public class SpringcloudProviderEmp8001Application {
public static void main(String[] args) {
SpringApplication.run(SpringcloudProviderEmp8001Application.class, args);
}
}
通过localhost:7001
进行访问。
预期可以看到,eureka注册中心,有了一条8001服务。
3.演示自我保护机制
把8001服务关闭,会发现eureka注册中心仍然可以看到服务的信息,而且保持了一定的时间段(默认是90s),等到超过了这个时间段,就会抛出异常,这是正确的结果。
总结
由于依赖那一块,一直没有解决,暂时没有找到方法处理,所以暂时搁置在这里,后面想到了,再来解决。