springcloud 之组件 eureka 实战使用(二)

今天继续讲解 eureka 使用,重点功能 :用户认证、续约保活、健康监测、服务下线、高可用 等五个功能点。

一、eureka 用户认证:

1、eureka 服务端 pom文件中加依赖


    org.springframework.boot
    spring-boot-starter-security

2、application.properties 配置中加  

security.basic.enabled=true
spring.security.user.name=admin
spring.security.user.password=admin

3、加入关闭crsf 验证功能的类

package com.navinfo.nandao;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@EnableWebSecurity
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //关闭csrf
        http.csrf().disable();
        //开启认证:URL格式登录必须是httpBasic
        http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
    }
}

4、eureka客户端 设置:ip前面加上用户名:密码@ 

eureka.client.serviceUrl.defaultZone=http://admin:admin@localhost:8763/eureka/

5、启动eureka 服务端和客户端  访问:http://localhost:8760/  进入登录页面:

springcloud 之组件 eureka 实战使用(二)_第1张图片

输入用户名和密码后  :

springcloud 之组件 eureka 实战使用(二)_第2张图片

以上就是eureka 用户注册认证功能

二、续约保活

客户端配置:当客户端启动想 eureka 注册了本身服务列表后,需要隔段时间发送一次心跳给 eureka 服务
端来证明自己还活着,当 eureka 收到这个心跳请求后才会知道客户端还活着,才会维护该
客户端的服务列表信息。一旦因为某些原因导致客户端没有按时发送心跳给 eureka 服务端,
这时候 eureka 可能会认为你这个客户端已经挂了,它就有可能把该服务从服务列表中删除
掉。
#服务续约,心跳的时间间隔
eureka.instance.lease-renewal-interval-in-seconds=30
#如果从前一次发送心跳时间起,90秒没接受到新的心跳,讲剔除服务
eureka.instance.lease-expiration-duration-in-seconds=90
#表示eureka client间隔多久去拉取服务注册信息,默认为30秒
eureka.client.registry-fetch-interval-seconds=30

服务端配置:

#自我保护模式,当出现出现网络分区、eureka在短时间内丢失过多客户端时,会进入自我保护模式,即一个服务长时间没有发送心跳,eureka也不会将其删除,默认为true,90秒后再删。
eureka.server.enable-self-preservation=true

#Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来
eureka.server.renewal-percent-threshold=0.85

#eureka server清理无效节点的时间间隔,默认60000毫秒,即60秒
eureka.server.eviction-interval-timer-in-ms=60000

三、健康监测:

客户端配置:

#健康检测
eureka.client.healthcheck.enabled=true

jar包引入:


    org.springframework.boot
    spring-boot-starter-actuator
客户端 自定义健康检测代码:控制力度比较细的健康维护!
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.boot.actuate.health.Status;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MicroWebHealthIndicator implements HealthIndicator {

    boolean flag =true;//可变参数
    @Override
    public Health health() {
        if(flag) {
            return new Health.Builder(Status.UP).build();
        } else {
            return new Health.Builder(Status.DOWN).build();
        }
    }
}

springcloud 之组件 eureka 实战使用(二)_第3张图片

 
服务启动返回DOWN 该客户端 挂了,该状态返回给eureka服务端,定时拉取发现为down 状态,不能访问了,做到平滑下线。
 
四、服务下线:
 
比如有些情况是服务主机意外宕机了,也就意味着服务没办法给 eureka 心跳信息了,但是 eureka 在没有接受到心跳的情况下依赖维护该服务 90s,在这 90s 之内可能会有客户端调用 到该服务,这就可能会导致调用失败。
 所以我们必须要有一个机制能手动的立马把宕机的服 务从 eureka 服务列表中清除掉,避免被服务调用方调用到。
 
 调用服务下线的接口: 这个接口是调用 eureka 服务端的接口,手动 通过 postman 删除,例如:
 
 http://localhost:8763/eureka/apps/web-order/localhost:micro-order:8084
 
http://localhost:8763/eureka/apps:所连接的服务端地址
web-order/localhost:micro-order:8084:所要删除的客户端名称和地址
 
springcloud 之组件 eureka 实战使用(二)_第4张图片
 
 
五、eureka 高可用:
 
  整个微服务中存在多个 eureka 服务,每个 eureka 服务都是相互复制的,会把客户端注册进 来的服务复制到 eureka 集群中的其他节点里面来。其实简单来说就是 eureka 每个节点相互 复制,如图:
springcloud 之组件 eureka 实战使用(二)_第5张图片
 
 
1、单机 配置:
#是否注册eureka
eureka.client.register-with-eureka=false

#是否从eureka中拉取信息
eureka.client.fetch-registry=false

#暴露eureka 服务地址
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

2、多服务集群配置:

第一个服务:

server.port=8761
eureka.instance.hostname=Eureka8761
#是否注册到eureka
eureka.client.registerWithEureka=true
#是否从eureka中拉取注册信息
eureka.client.fetchRegistry=true
##暴露eureka服务的地址
eureka.client.serviceUrl.defaultZone=http://admin:[email protected]:8762/eureka/

第二个服务:

server.port=8762
eureka.instance.hostname=Eureka8762
#是否注册到eureka
eureka.client.registerWithEureka=true
#是否从eureka中拉取注册信息
eureka.client.fetchRegistry=true
##暴露eureka服务的地址
eureka.client.serviceUrl.defaultZone=http://admin:[email protected]:8761/eureka/

启动的时候按照指定配置文件启动
 java -jar springcloud-eureka.jar --spring.profiles.active=8761

 java -jar springcloud-eureka.jar --spring.profiles.active=8762

客户端配置:逗号隔开,同时注册到多台服务里

eureka.client.service-url.defaultZone=http://admin:[email protected]:8762/eureka/,http://admin:[email protected]:8761/eureka/

分别访问后显示:

springcloud 之组件 eureka 实战使用(二)_第6张图片

springcloud 之组件 eureka 实战使用(二)_第7张图片
 
访问后给个每个eureka 均有相同数目的客户端。
 
eureka 使用讲完,下一篇介绍ribbon 实战 ,敬请期待!!!
 
 
 
 
 

你可能感兴趣的:(springcloud,spring)