[转]Eureka自我保护机制、健康检查的做用、actuator模块监控

  • Eureka自我保护机制

接着以上篇文章创建的三个工程为基础(eureka-server,uerreg,myweb),默认Eureka是开启自我保护的。咱们来作个测试,咱们先启动三个工程,咱们访问注册中心http://localhost:8761/,java

 
image.png
能够看到,实例是成功注册到中心的。此时咱们将uerreg服务关闭,刷新注册中心,咱们会发现以下界面
 
image.png
咱们除了看到了一行红色的警告信息,还发现了一件神奇的事情,就是咱们的服务实例虽然被kill了,可是在服务注册中心他仍是存在的。这就是Eureka自我保护机制,他不会剔除已经挂掉的服务,他会认为这个服务是在尝试从新链接的。
咱们在开发过程当中确定是不但愿这样的,不利于开发。咱们能够关闭Eureka的自我保护机制(实际生产环境不建议关闭)。

 

  • eureka-server服务端
    配置文件中咱们添加以下配置
#关闭保护机制,以确保注册中心将不可用的实例正确剔除
eureka.server.enable-self-preservation=false
#(表明是5秒,单位是毫秒,清理失效服务的间隔 )
eureka.server.eviction-interval-timer-in-ms=5000

 

  • userreg客户端
    配置文件中咱们添加以下配置
# 心跳检测检测与续约时间
# 测试时将值设置设置小些,保证服务关闭后注册中心能及时踢出服务
# 配置说明
#  lease-renewal-interval-in-seconds 每间隔10s,向服务端发送一次心跳,证实本身依然”存活“
#  lease-expiration-duration-in-seconds  告诉服务端,若是我20s以内没有给你发心跳,就表明我“死”了,将我踢出掉。
eureka.instance.lease-renewal-interval-in-seconds=10
eureka.instance.lease-expiration-duration-in-seconds=20

  

咱们从新启动服务,而后关闭userreg客户端进行测试。
 
 

此时咱们发现,红色警告变成了自我保护被关闭的警告,且实例被注册中心剔除,代表此时自我保护机制被关闭。mysql

  • 健康检查

人会生病,就像人同样服务有时候也会出现异常状况,咱们也须要知道某个服务的健康情况。咱们能够经过添加以下依赖,开启某个服务的健康检查。以userreg服务为例
pom文件中添加以下依赖web

<!--健康检查依赖-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-actuator</artifactId>
       </dependency>

  

ok,其余的什么都不变,咱们来访问一下这个接口http://localhost:9001/health
咱们看到了一个很简短的健康报告:{"description":"Spring Cloud Eureka Discovery Client","status":"UP"},相似的还有spring

info 显示任意的应用信息
metrics 展现当前应用的指标信息 true
mappings 显示全部@RequestMapping路径的整理列表
trace 显示trace信息(默认为最新的一些HTTP请求)
health 展现应用的健康信息
beans 显示一个应用中全部Spring Beans的完整列表sql

这其中有一些是敏感信息,出于安全考虑,若是不设置apache

#关掉认证(公网下的生产环境不建议,内网部署能够)
#management.security.enabled=false

默认是没法访问的。
若是咱们要访问查看并且想保证必定的安全性,咱们应该作什么呢?咱们在userreg的pom文件中引入tomcat

<!--安全认证依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

  

此时咱们访问/beans敏感信息时,弹出以下信息,须要咱们进行身份认证安全

 
 

仅仅引入依赖实际上是有问题的,由于咱们请求正常的业务接口他也会要求进行认证,解决办法能够在userreg工程的配置文件中添加以下设置:springboot

#(增长了访问路径)
management.context-path=/admin
security.user.name=root
security.user.password=123
#只对/admin进行安全认证
security.basic.path=/admin

重启服务,咱们访问http://localhost:9001/admin/beans,注意哦,咱们在配置文件中添加了相对路径,只对admin进行验证,此时咱们输入正确的用户名和密码(已在配置文件中配置)会显示咱们须要的信息。app

  • 实战健康检查

健康检查在实际应用场景中有哪些呢?举个例子,咱们配置userreg工程数据源
在pom文件中引入如下依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

而后创建一个配置类,配置数据源DataSource

@Configuration
public class Myconfig {
   @Bean
   public DataSource dataSource()
   {
       org.apache.tomcat.jdbc.pool.DataSource dataSource=new org.apache.tomcat.jdbc.pool.DataSource();
       dataSource.setUrl("jdbc:mysql://localhost/test?characterEncoding=UTF-8");
       dataSource.setUsername("root");
       dataSource.setPassword("mysql");
       dataSource.setDriverClassName("com.mysql.jdbc.Driver");
       return dataSource;
   }
}

这个在springboot中已经学习过,后续我会把springboot学习过程以博客的方式记录下来,配置完成数据源以后,咱们启动服务,访问http://localhost:9001/admin/health 查看健康状况

 
image.png
咱们能够看到db的健康状况。假如此时咱们的mysql服务挂掉,会怎样呢?
 
image.png
咱们手动中止mysql服务,而后再看健康状况
 
image.png
发现db状态已经由“UP”变成了“DOWN”并显示了错误信息,这样就很方便咱们查看服务的健康状况了。
做者:谜00016 连接:https://www.jianshu.com/p/df61a3273528 來源:简书 简书著做权归做者全部,任何形式的转载都请联系做者得到受权并注明出处。
相关文章
相关标签/搜索