今天继续讲解 eureka 使用,重点功能 :用户认证、续约保活、健康监测、服务下线、高可用 等五个功能点。
一、eureka 用户认证:
1、eureka 服务端 pom文件中加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
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/ 进入登录页面:
输入用户名和密码后 :
以上就是eureka 用户注册认证功能
二、续约保活
客户端配置:当客户端启动想 eureka 注册了本身服务列表后,需要隔段时间发送一次心跳给 eureka 服务
端来证明自己还活着,当 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包引入:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
客户端 自定义健康检测代码:控制力度比较细的健康维护!
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(); } } }
服务启动返回DOWN 该客户端 挂了,该状态返回给eureka服务端,定时拉取发现为down 状态,不能访问了,做到平滑下线。
四、服务下线:
比如有些情况是服务主机意外宕机了,也就意味着服务没办法给 eureka 心跳信息了,但是 eureka 在没有接受到心跳的情况下依赖维护该服务 90s,在这 90s 之内可能会有客户端调用 到该服务,这就可能会导致调用失败。
所以我们必须要有一个机制能手动的立马把宕机的服 务从 eureka 服务列表中清除掉,避免被服务调用方调用到。
所以我们必须要有一个机制能手动的立马把宕机的服 务从 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:所要删除的客户端名称和地址
五、eureka 高可用:
整个微服务中存在多个 eureka 服务,每个 eureka 服务都是相互复制的,会把客户端注册进 来的服务复制到 eureka 集群中的其他节点里面来。其实简单来说就是 eureka 每个节点相互 复制,如图:
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/
分别访问后显示:
访问后给个每个eureka 均有相同数目的客户端。
eureka 使用讲完,下一篇介绍ribbon 实战 ,敬请期待!!!