国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

Spring Cloud Config Client超時及重試示例詳解

2024-07-14 08:40:50
字體:
來源:轉載
供稿:網友

簡介

有時客戶端需要在 config server 無響應時進行重試,以給 config server 時間進行恢復。利用 spring 提供的重試組件,我們可以方便的配置重試機制,包括重試間隔,重試次數等。下面話不多說了,來一起看看詳細的介紹吧。

項目源碼

點擊下載

為 web 項目添加依賴

開啟客戶端重試功能需要兩個新依賴,spring-retry 和 spring-boot-starter-aop,把如下代碼添加到 web 項目的 pom.xml 文件中:

<dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> <version>1.2.2.RELEASE</version></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency>

然后在 bootstrap.yml 文件中添加如下配置:

spring: application: name: web-client cloud: config:  uri: http://localhost:8888  fail-fast: true  retry:  initial-interval: 1000  max-attempts: 6  max-interval: 2000  multiplier: 1.1

首先把 spring.cloud.config.fail-fast 為true,即在獲取不到遠程配置時,立即失敗,但是用下邊的配置進行重試。

spring.cloud.config.retry 所有子項均為默認值:

  • initial-interval: 最初重試間隔為 1000 毫秒
  • max-attempts: 最多重試 6 次
  • max-interval: 最長重試間隔為 2000 毫秒
  • multiplier:  每次重試失敗后,重試間隔所增加的倍數

測試

如果使用了本教程的項目,我們需要首先啟動 configserver 項目,然后再啟動 registry 項目開啟 eureka,因為 web 客戶端使用了 eureka 服務,之后關閉 configserver,然后啟動 web 項目,會看到如下 log:

2018-05-15 16:04:58.421  INFO 2663 --- [           main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://localhost:8888

重試 6 次失敗后,客戶端啟動失敗,如果中途開啟 configserver,則 web 客戶端啟動成功。
細粒度控制重試

我們可以在代碼中實現更精細的控制重試機制,在 web 項目中創建一個新的 java 類 cn.zxuqian.configurations.RetryConfiguration,添加如下代碼:

package cn.zxuqian.configurations;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;import org.springframework.context.annotation.Bean;import org.springframework.retry.interceptor.RetryInterceptorBuilder;import org.springframework.retry.interceptor.RetryOperationsInterceptor;public class RetryConfiguration { private static Logger log = LoggerFactory.getLogger(RetryConfiguration.class); @Bean @ConditionalOnMissingBean(name = "configServerRetryInterceptor") public RetryOperationsInterceptor configServerRetryInterceptor() {  log.info(String.format(    "configServerRetryInterceptor: Changing backOffOptions " +      "to initial: %s, multiplier: %s, maxInterval: %s",    1000, 1.2, 5000));  return RetryInterceptorBuilder    .stateless()    .backOffOptions(1000, 1.2, 5000)    .maxAttempts(10)    .build(); }}

這里我們定義了configServerRetryInterceptor方法用于 Spring Retry 使用我們自定義的重試攔截器。方法使用 RetryInterceptorBuilder 按要求創建了一個 stateless 的 RetryOperationsInterceptor,并設置了初始重試間隔為 1000 毫秒,增加倍數為 1.2 倍,最大重試間隔為 5000 毫秒,最大重試次數為 10 次,builder 還提供了諸如配置重試機制之類的接口,有興趣的讀者可自行研究。

@ConditionalOnMissingBean 標明當 BeanFactory 中沒有名為 configServerRetryInterceptor 的 bean 時才匹配此 Bean。

最后在 src/main/resources/META-INF/ (沒有可創建此文件夾) 新建一個 spring.factories 文件,指定我們剛創建類為啟動時的配置,以在獲取遠程配置之前生效:

org.springframework.cloud.bootstrap.BootstrapConfiguration=cn.zxuqian.configurations.RetryConfiguration

測試

最后在關閉 configserver 的條件下啟動 web 項目,然后就會看到重試十次之后,項目啟動失敗。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 英山县| 宁陵县| 永顺县| 黄大仙区| 中西区| 青海省| 辽宁省| 无极县| 云龙县| 无棣县| 青岛市| 新宾| 新河县| 河间市| 卓资县| 临沂市| 镇安县| 宜良县| 昭觉县| 龙里县| 齐河县| 连南| 铜陵市| 阿拉善右旗| 崇仁县| 光泽县| 报价| 永福县| 新密市| 新化县| 东辽县| 高邑县| 高碑店市| 高密市| 大渡口区| 新宁县| 巴彦县| 清新县| 华坪县| 怀仁县| 瓦房店市|