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地址

代碼地址

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