当前位置:   article > 正文

03.SpringCloud之服务注册中心Eureka:Actuator、SpringBootAdmin、自我保护模式、优雅停服、安全认证_springboot actuator 与eureka服务状态

springboot actuator 与eureka服务状态

一、Actuator

SpringBoot Actuator可以帮助我们监测和管理SpringBoot应用,比如健康检查,审计,统计和Http追踪等。

1.导入依赖

在这里插入图片描述

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.启动项目

修改端口并启动

server.port=8085
  • 1

在这里插入图片描述
在Actuator中默认只给我们放开了两个接口info和health
在这里插入图片描述

3.在配置文件中可以放开限制

修改属性文件

# 在Actuator中默认值放开了info和health 如果要放开所有*
management.endpoints.web.exposure.include=*

# 放开shutdown接口
management.endpoints.enabled-by-default=true
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
在这里插入图片描述

二、SpringBootAdmin

我们前面介绍的Actuator监控返回的是一对JSON数据,查看起来也非常不方便,那么这时候我们可以通过监视化的监控报表工具SpringBootAdmin来单独处理这些数据,给用户更好地体验

1.监控服务器

搭建一个SpringBootAdmin服务,获取Actuator中的JSON数据
具体配置参考官网:https://github.com/codecentric/spring-boot-admin

导入相关的依赖

        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

1.1.在启动类添加@EnableAdminServer注解

在这里插入图片描述

1.1.2.属性配置文件添加端口

在这里插入图片描述

1.1.3.启动服务,访问即可

在这里插入图片描述
访问localhost:8086即可
表示SpringBootAdmin服务端创建成功

2.客户端

将客户端注册到SpringBootAdmin服务器中

2.1添加相关的依赖

在客户端加上相关依赖

        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-client</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.2 修改属性文件

# 配置SpringBootAdmin 服务端的地址
spring.boot.admin.client.url=http://localhost:8086
management.endpoints.web.exposure.include=*
management.endpoints.enabled-by-default=true
  • 1
  • 2
  • 3
  • 4

3.启动测试

在这里插入图片描述

4.添加SpringSecurity的配置文件,放开所有的权限

package com.biao.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().permitAll()
                .and().csrf().disable();
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

5.再访问

在这里插入图片描述

三、Eureka之自我保护模式

1.什么是自我保护模式

在这里插入图片描述

1.1.自我保护的条件

一般情况下,微服务在 Eureka 上注册后,会每 30 秒发送心跳包,Eureka 通过心跳来判断服务是否健康,同时会定期删除超过 90 秒没有发送心跳服务。

1.2.导致 Eureka Server 收不到微服务的心跳两种情况

  • 是微服务自身的原因
  • 是微服务与 Eureka 之间的网络故障

通常(微服务的自身的故障关闭)只会导致个别服务出现故障,一般不会出现大面积故障,而(网络故障)通常会导致 Eureka Server 在短时间内无法收到大批心跳。考虑到这个区别,Eureka 设置了一个阀值,当判断挂掉的服务的数量超过阀值时,Eureka Server 认为很大程度上出现了网络故障,将不再删除心跳过期的服务。

1.3.这个阀值是多少呢?

15 分钟之内是否低于 85%;Eureka Server 在运行期间,会统计心跳失败的比例在 15 分钟内是否低于 85%,这种算法叫做 Eureka Server 的自我保护模式。

2.为什么要自我保护

  1. 因为同时保留"好数据"与"坏数据"总比丢掉任何数据要更好,当网络故障恢复后,这个 Eureka 节点会退出"自我保护模式"。
  2. Eureka 还有客户端缓存功能(也就是微服务的缓存功能)。即便 Eureka 集群中所有节点都宕机失效,微服务的 Provider 和 Consumer都能正常通信。
  3. 微服务的负载均衡策略会自动剔除死亡的微服务节点。

3.如何关闭自我保护

修改 Eureka Server 配置文件

spring.application.name=eureka-provider1
server.port=9090

# 设置服务注册中心地址 执行Eureka服务端 如果有多个注册地址 那么用逗号连接
eureka.client.service-url.defaultZone=http://192.168.134.129:8761/eureka/,http://192.168.134.131:8761/eureka/

# 配置SpringBootAdmin 服务端的地址
spring.boot.admin.client.url=http://localhost:8086
management.endpoints.web.exposure.include=*
management.endpoints.enabled-by-default=true

# 关闭Eureka的自我保护
eureka.server.enable-self-preservation=false 
# 设置删除无效服务的间隔时间 单位毫秒
eureka.server.eviction-interval-timer-in-ms=10000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

四、优雅停服

服务提供者下线的时候如果更好的将自身在Eureka中的注册信息移除呢?Eureka Server中的自我保护模式就不需要关闭了。需要添加Actuator的支持

1.添加依赖

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
  • 1
  • 2
  • 3
  • 4

2.服务提供者配置指标监控与健康检查

#开启shutdown端点访问(这里开启所有)
management.endpoints.web.exposure.include=*
#开启shutdown实现优雅停服
management.endpoints.enabled-by-default=true
  • 1
  • 2
  • 3
  • 4

3. 使用post请求/actuator/shutdown

3.1未停服之前服务状况

在这里插入图片描述

3.2 请求优雅停服路径http://localhost:9090/actuator/shutdown

利用PostMan
在这里插入图片描述

3.3 服务立即停止

在这里插入图片描述
在这里插入图片描述

五、安全认证

在这里插入图片描述

1.注册中心配置

我们可以在Eureka的注册中心中添加SpringSecurity来增加安全认证

1.1 添加依赖

         <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
  • 1
  • 2
  • 3
  • 4

1.2 添加SpringSecurity的配置文件

在这里插入图片描述

package config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .anyRequest()
                .authenticated()
                .and().httpBasic()
                .and().csrf().disable();
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

1.3 修改两个属性文件

spring.application.name=eureka-server
server.port=8761

# 开启http basic 的安全认证
spring.security.user.name=biao
spring.security.user.password=123456

# 设置Eureka的实例名称 与配置文件中的变量为主
eureka.instance.hostname=eureka1
# 设置注册中心的地址,指向另一个注册中心 192.168.134.129
eureka.client.service-url.defaultZone=http://biao:123456@192.168.134.132:8761/eureka
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
spring.application.name=eureka-server
server.port=8761

# 开启http basic 的安全认证
spring.security.user.name=biao
spring.security.user.password=123456

# 设置Eureka的实例名称 与配置文件中的变量为主
eureka.instance.hostname=eureka2
# 设置注册中心的地址,指向另一个注册中心 192.168.134.131
eureka.client.service-url.defaultZone=http://biao:123456@192.168.134.129:8761/eureka

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

1.4 打包部署即可

先删除test相关类和依赖,再打包,再部署环境
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.服务提供者和消费者

我们需要在属性文件中添加相关的账号信息

2.1服务提供者

spring.application.name=eureka-provider1
server.port=9090

# 设置服务注册中心 执行Eureka服务端 如果有多个注册中心 那么用逗号连接
eureka.client.service-url.defaultZone=http://bb:1234@192.168.134.129:8761/eureka/,http://bb:1234@192.168.134.131:8761/eureka/

# 配置SpringBootAdmin服务端的地址
# spring.boot.admin.client.url=http://localhost:8086
management.endpoints.web.exposure.include=*
management.endpoints.enabled-by-default=true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.2 服务消费者

spring.application.name=eureka-consumer1
server.port=9091

## 设置服务注册中心 执行Eureka服务端 如果有多个注册中心 那么用逗号连接
eureka.client.service-url.defaultZone=http://bb:1234@192.168.134.129:8761/eureka/,http://bb:1234@192.168.134.131:8761/eureka/

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.3 测试访问

在这里插入图片描述

2.3.1 测试相关代码

基于上一章第四的服务案例

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/963425
推荐阅读
相关标签
  

闽ICP备14008679号