天天看點

java B2B2C 多租戶電子商城系統-Spring Cloud常見問題與總結(三)

一.Spring Cloud各元件重試

Spring Cloud各元件的重試配置。

早期,Spring Cloud的重試機制是比較混亂的-各個元件都有自己的重試機制,例如Ribbon、Feign、Zuul。官方也意識到了這個問題,并對重試相關邏輯進行了改造與簡化。

在Spring Cloud Edgware中,配置重試是非常簡單的。

重試步驟

1.重試依賴spring-retry,是以引入重試依賴

<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>           

2.配置重試

<client>
  ribbon:
    # 同一執行個體最大重試次數,不包括首次調用
    MaxAutoRetries: 1 
    # 重試其他執行個體的最大重試次數,不包括首次所選的server
    MaxAutoRetriesNextServer: 2 
    # 是否所有操作都進行重試
    OkToRetryOnAllOperations: false           

其中是Ribbon Client名稱,表示對指定名稱的Ribbon Client進行重試。如果省略,則表示對所有Ribbon Client都進行重試。

3.對于Zuul,重試特性預設關閉。可使用zuul.retryable=true全局打開重試,也可使用zuul.routes..retryable=true打開指定重試。

 基于HTTP響應碼重試

Spring Cloud也支援基于HTTP響應碼進行重試,隻需使用類似如下的配置即可:

<clientName>:
  ribbon:
    retryableStatusCodes: 404,502           

關閉重試

1.對于其它元件,可配置spring.cloud.loadbalancer.retry.enabled=false.

2.對于zuul,可配置zuul.retryable=false或zuul.routes..retryable=true.

注意點

Hystrix的逾時時間必須大于逾時的時間,否則,一旦Hystrix逾時,就沒辦法繼續重試了。

一般來說,不建議将ribbon.OkToRetryOnAllOperations 設為true。因為一旦啟用該配置,則表示重試任何操作,包括POST請求,而由于緩存了請求體,此時可能會影響伺服器的資源。

java B2B2C 多租戶電子商城系統