Eureka服务注册与发现(二)

Eureka服务注册与发现(二)

接上一篇:Eureka服务注册与发现(一)

为Eureka Server添加用户认证

之前的Eureka Serverhi是可以匿名访问,接下来构造一个需要认证的项目

  • 在之前的Eureka Server中添加依赖
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security
compile group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: '2.1.6.RELEASE'
  • application.yml中添加配置
spring:
  profiles: peer1
  security:
    user:
      name: root
      password: root123
server:
  port: 8761
eureka:
  instance:
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer2:8762/eureka/
  • 访问http://127.0.0.1:8761/即可进入登陆页面
    在这里插入图片描述

将微服务注册到需要认证的Eureka Server

  • 修改用户微服务的配置文件如下:
eureka:
  client:
    serviceUrl:
      defaultZone: http://root:root123@localhost:8761/eureka/
  instance:
    prefer-ip-address: true

但是这样启动会一直报错。无法将服务注册到Eureka Server,报错如下

com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
  • 通过查阅官方文档,找到解决办法,需要在Eureka Server增加以下配置类:
@EnableWebSecurity
class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().ignoringAntMatchers("/eureka/**");
        super.configure(http);
    }
}
  • 可以在Eureka Server上看到服务已经成功注册:
    在这里插入图片描述

Eureka的自我保护模式

上一篇提到了Eureka的自我保护模式(红色的提示)。默认情况下,如果Eureka Server在一段时间内如果没有接收到某个微服务实例的心跳,Eureka Sserver会注销该实例(默认30S),但是当网络故障时,微服务与Eureka Server之间无法通信,但是服务确实正常的,如果立即注销服务那很不合理而且很危险。
Eureka Server通过“自我保护模式”解决这个问题——当Eureka Server节点在短时间内丢失过多客户端时,那么这个节点进入自我保护模式。一旦进入该模式,Eureka Server会保护服务注册表中的信息,不在删除服务。当网络故障回复后,该Eureka Server节点会自动退出自我保护模式。
在Spring Cloud中可通过添加如下配置,禁用自我保护模式:

eureka:
  server:
    enable-self-preservation: false

Eureka的健康检查

  • 下图时Eureka Server中的服务状态信息。服务状态共有:UP、OUT_OF_SERVICE、UNKOWN等。
    在这里插入图片描述

  • 只有标记为UP的服务才是正常的,才能被其他服务请求。在Spring Boot中通过添加Spring Boot Actuator的/health节点能够看到服务的状态,在Eureka Client中通过简单的配置即可将服务的状态传播到Eureka Server,配置如下:

eureka:
  client:
    healthcheck:
      enabled: true

Github地址

代码地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章