springcloud常見問題總結以(一)


一, Eureka常見問題

1. Eureka注冊服務慢

  1. 服務注冊涉及到周期性的心跳,默認30秒一次,只有當實例、服務器端和客戶端本地緩存中的元數據都相同時,服務才能被其他客戶端發現(可能需要三次心跳)。
  2. 可以使用參數eureka.instance.leaseRenewalintervalInSeconds修改eureka client向eureka server發送心跳間隔,從而加快客戶端連接到其他服務的過程。
    在生產環境中最好堅持使用默認值,因為在服務器內部有一些計算,它們會對續約做出假設。

2. 已停止的服務節點注銷慢或者不注銷

  1. Eureka server清理無效節點的周期比較長(默認90秒),以及自我保護等原因,可能對服務節點注銷慢或者不注銷
  2. Eureka server配置關閉自我保護,並按需配置清理無效節點的間隔:
        eureka:
          server:
            enable-self-preservation: false   # 測試時關閉自我保護機制,保證不可用服務及時踢出
            eviction-interval-timer-in-ms: 30000        # 清理間隔 單位是毫秒
  1. Eureka client端開啟健康檢查,按需配置續約更新時間和到期時間:
        eureka:
            client:
                healthcheck:
                  enabled: true  #開啟健康檢查(需要spring-boot-starter-actuator依賴)
            instance:
                  lease-renewal-interval-in-seconds: 1  # 每間隔1s,向服務端發送一次心跳,證明自己依然”存活“, 默認30秒
                  lease-expiration-duration-in-seconds: 2 # 告訴服務端,如果我2s之內沒有給你發心跳,就代表我“死”了,將我踢出掉, 默認90秒。
    注意:
        這些配置一般在開發測試的時候使用,生產環境建議使用默認配置
  1. 自定義微服務instanceID
eureka:
  instance:
      instance-id: ${spring.cloud.client.ipAddress}:${server.port}  # 將instance-id設置為ip:端口的形式。

二, Hystrix常見問題

1. Hystrix/feign 整合Hystrix后首次訪問失敗的問題

  1. Hystrix默認超時時間是1秒,首次加載的時候因為服務器緩存,或者創建連接池等原因,就會進入fallback邏輯。由於spring的懶加載機制,因此在某些機器上首次請求的時間可能大於1秒
  2. 解決方案一,延長Hystrix超時時間:
    代碼中修改默認超時配置(改為3秒):
            @HystrixCommand(commandProperties = {
                 @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000")
            })
            public String serverMethod() {
              return null;
            }
        application.properties中設置默認超時時間:
        1.默認:(方法上記得要加上@HystrixCommand,否則無效):
        hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000
        2.配置具體方法的超時時間
        hystrix.command.serverMethod.execution.isolation.thread.timeoutInMilliseconds=3000
  1. 解決方案二,禁用Hystrix超時:
    hystrix.command.default.execution.timeout.enabled: false
  2. 對於feign,可以禁用feign的hystrix功能
    feign.hystrix.enabled: false #比較極端,一般不建議使用

三, springcloud 問題定位思路總結

  1. YAML縮進是否正確:
    YAML縮進不正確會導致springcloud 應用無法正常啟動或者配置文件無法加載
  2. 配置屬性是否正確:
  3. 配置屬性位置是否正確:
    -應當配置在Eureka client 的屬性配置在了Eureka server
    -應當配置在bootstrap.yml的屬性,寫在了application.yml中,例如:
    spring.cloud.config.uri= http://...
    -應當配置在application.yml的屬性,寫在了bootstrap.yml中,例如:
    eureka.client.healthcheck.enabled= true

吐槽:博客園的markdown編輯器怎么這么難用

四, springcloud 升級到G版本后網關springcloud-gateway報錯 java.lang.NullPinterExcetervalue:.value 異常

經過排查發現是因為在路由轉發請求頭時沒有判斷值為null的情況導致,過濾掉head為null的情況即可解決


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM