国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【SpringBoot】springboot使用RestTemplate 進(jìn)行http請(qǐng)求失敗自動(dòng)重試

這篇具有很好參考價(jià)值的文章主要介紹了【SpringBoot】springboot使用RestTemplate 進(jìn)行http請(qǐng)求失敗自動(dòng)重試。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

我們的服務(wù)需要調(diào)用別人的接口,由于對(duì)方的接口服務(wù)不是很穩(wěn)定,經(jīng)常超時(shí),于是需要增加一套重試邏輯。這里使用 Spring Retry 的方式來(lái)實(shí)現(xiàn)。

一、引入POM

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
</dependency>

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

二、 修改啟動(dòng)類

在Spring Boot 應(yīng)用入口啟動(dòng)類,也就是配置類的上面加上@EnableRetry 注解,表示讓重試機(jī)制生效。

【SpringBoot】springboot使用RestTemplate 進(jìn)行http請(qǐng)求失敗自動(dòng)重試

@EnableRetry
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class RuoYiApplication
{
    @Bean
    RestTemplate restTemplate(){
        return new RestTemplate();
    }
    public static void main(String[] args)
    {
        SpringApplication.run(RuoYiApplication.class, args);
    }
}

注意:

我這里還注入了Bean,因?yàn)樵趩?dòng)項(xiàng)目是會(huì)報(bào)錯(cuò)。

@Bean
RestTemplate restTemplate(){
     return new RestTemplate();
 }

報(bào)錯(cuò)信息:

Field restTemplate in com.cloud.ribbon_consumer.project.service.HelloService required a bean of type 'org.springframework.web.client.RestTemplate' that could not be found.

問(wèn)題原因:

Spring Boot 1.3版本中,會(huì)默認(rèn)提供一個(gè)RestTemplate的實(shí)例Bean,而在 Spring Boot 1.4以及以后的版本中,這個(gè)默認(rèn)的bean不再提供了,我們需要在Application啟動(dòng)時(shí),手動(dòng)創(chuàng)建一個(gè)RestTemplate的配置。

這樣,我們?cè)陬愔型ㄟ^(guò)注解 @Autowired 使用 TestTemplate 的時(shí)候,程序就可以找到被實(shí)例化的 TestTemplate,就不會(huì)出現(xiàn)上述的報(bào)錯(cuò)了。

三、具體使用

寫一個(gè)模擬的業(yè)務(wù)類RetryService ,在其里面注入RestTemplate 。

@Service
public class RetryService {
    private static Logger log = LoggerFactory.getLogger(RetryService.class);

    @Resource
    private RestTemplate restTemplate;

    private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");


    @Retryable(value = RestClientException.class, maxAttempts = 3,
            backoff = @Backoff(delay = 5000L,multiplier = 2))
    public String getRequest(String address) {
        log.info("發(fā)起遠(yuǎn)程API 地址: {} ,請(qǐng)求事件: {}", address, DATE_TIME_FORMATTER.format(LocalDateTime.now()));

        ResponseEntity<String> responseEntity
                = restTemplate.getForEntity(address, String.class);

        // 獲取響應(yīng)結(jié)果
        return responseEntity.getBody();
    }
}
  1. @Retryable注解的方法在發(fā)生異常時(shí)會(huì)重試,參數(shù)說(shuō)明:
  • value:當(dāng)指定異常發(fā)生時(shí)會(huì)進(jìn)行重試 ,HttpClientErrorException是RestClientException的子類。
  • include:和value一樣,默認(rèn)空。如果 exclude也為空時(shí),所有異常都重試
  • exclude:指定異常不重試,默認(rèn)空。如果 include也為空時(shí),所有異常都重試
  • maxAttemps:最大重試次數(shù),默認(rèn)3
  • backoff:重試等待策略,默認(rèn)空
  1. @Backoff注解為重試等待的策略,參數(shù)說(shuō)明:
  • delay:指定重試的延時(shí)時(shí)間,默認(rèn)為1000毫秒
  • multiplier:指定延遲的倍數(shù),比如設(shè)置delay=5000,multiplier=2時(shí),第一次重試為5秒后,第二次為10(5x2)秒,第三次為20(10x2)秒。

四、測(cè)試

我這里寫了一個(gè)不存在的服務(wù),用于測(cè)試重試機(jī)制

 @GetMapping(value = "/update1")
    public String updatePingTai1() {
        String request = retryService.getRequest("http://127.0.0.1:3214");
        return request);
    }

【SpringBoot】springboot使用RestTemplate 進(jìn)行http請(qǐng)求失敗自動(dòng)重試

這里可以看到我們是重試了三次,才拋出的異常。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-475118.html

參考:

  1. https://www.cnblogs.com/zimug/p/13507850.html
  2. https://www.cnblogs.com/liuyupen/p/13957171.html#%E6%96%B9%E5%BC%8F%E5%9B%9Bspring-%E8%87%AA%E5%B8%A6%E9%87%8D%E8%AF%95%E5%B7%A5%E5%85%B7
  3. https://www.cnblogs.com/liuyupen/p/13957171.html#%E6%96%B9%E5%BC%8F%E5%9B%9Bspring-%E8%87%AA%E5%B8%A6%E9%87%8D%E8%AF%95%E5%B7%A5%E5%85%B7

到了這里,關(guān)于【SpringBoot】springboot使用RestTemplate 進(jìn)行http請(qǐng)求失敗自動(dòng)重試的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot中RestTemplate的使用備忘

    2-1 引入Maven依賴 2-2 創(chuàng)建 RestTemplate 配置類,設(shè)置連接池大小、超時(shí)時(shí)間、重試機(jī)制等等。 4-1 使用示例 4-2 參數(shù)傳遞的幾種方式 5-1 使用示例 5-2 參數(shù)傳遞的幾種方式 6-1 使用示例 6-2 設(shè)置 url 參數(shù),同Get請(qǐng)求 7-1 使用示例,和postForObject()基本相似,返回的是ResponseEntity罷了 7-2 設(shè)置

    2024年02月02日
    瀏覽(15)
  • springboot使用restTemplate調(diào)用webservice接口

    springboot使用restTemplate調(diào)用webservice接口

    1.首先確定wsdl的http地址,使用postman測(cè)試接口是否成功 ?在瀏覽器輸入webservice地址可以找到相應(yīng)的請(qǐng)求和響應(yīng)示例。 ? ?如果postman返回了正確的數(shù)據(jù),就說(shuō)明測(cè)試成功! 2.接下來(lái)代碼:

    2024年01月16日
    瀏覽(25)
  • SpringBoot 使用RestTemplate來(lái)調(diào)用https接口

    使用RestTemplate來(lái)訪問(wèn)第三方https接口,接口類型為POST,返回?cái)?shù)據(jù)為JSON,需要忽略https證書,因此對(duì)RestTemplate 進(jìn)行配置,通過(guò)HttpClient的請(qǐng)求工廠(HttpComponentsClientHttpRequestFactory)進(jìn)行構(gòu)建。HttpComponentsClientHttpRequestFactory使用一個(gè)信任所有站點(diǎn)的HttpClient就可以解決問(wèn)題了。 中間

    2024年02月13日
    瀏覽(21)
  • SpringBoot 使用 RestTemplate 發(fā)送 binary 數(shù)據(jù)流

    SpringBoot 使用 RestTemplate 發(fā)送 binary 數(shù)據(jù)流

    情況說(shuō)明: 接口A接受到一個(gè)數(shù)據(jù)流,在postman里的傳輸方式顯示如下: 接口A接受到這個(gè)數(shù)據(jù)流之后,需要轉(zhuǎn)發(fā)到接口B進(jìn)行處理。 這里要注意一點(diǎn)是: postman圖中的這種方式和MultipartFile流的傳輸方式不同,MultipartFile流方式,是在body的form表單中進(jìn)行傳輸,需要指定一個(gè)key,這

    2024年02月12日
    瀏覽(20)
  • SpringBoot | RestTemplate異常處理器ErrorHandler使用詳解

    SpringBoot | RestTemplate異常處理器ErrorHandler使用詳解

    關(guān)注wx:CodingTechWork ??在代碼開發(fā)過(guò)程中,發(fā)現(xiàn)很多地方通過(guò) RestTemplate 調(diào)用了第三方接口,而第三方接口需要根據(jù)某些狀態(tài)碼或者異常進(jìn)行重試調(diào)用,此時(shí),要么在每個(gè)調(diào)用的地方進(jìn)行異常捕獲,然后重試;要么在封裝的 RestTemplate 工具類中進(jìn)行統(tǒng)一異常捕獲和封裝。當(dāng)然

    2024年02月12日
    瀏覽(17)
  • SpringBoot之RestTemplate使用Apache的HttpClient連接池

    SpringBoot自帶的RestTemplate是沒(méi)有使用連接池的,只是SimpleClientHttpRequestFactory實(shí)現(xiàn)了ClientHttpRequestFactory、AsyncClientHttpRequestFactory 2個(gè)工廠接口,因此每次調(diào)用接口都會(huì)創(chuàng)建連接和銷毀連接,如果是高并發(fā)場(chǎng)景下會(huì)大大降低性能。因此,我們可以使用Apache的HttpClient連接池。

    2024年02月11日
    瀏覽(19)
  • 【SpringBoot教程】SpringBoot開發(fā)HTTP接口GET請(qǐng)求實(shí)戰(zhàn)

    【SpringBoot教程】SpringBoot開發(fā)HTTP接口GET請(qǐng)求實(shí)戰(zhàn)

    ? 專欄地址 系列教程更新中 ?? 專欄介紹: 本專欄為SpringBoot+Spring+Mybatis的系列零基礎(chǔ)教程,從框架的基礎(chǔ)知識(shí)講起,從0開始實(shí)現(xiàn)一個(gè)在線教育實(shí)戰(zhàn)項(xiàng)目 ?? 源碼獲取 : 項(xiàng)目中的資料可以通過(guò)文章底部公眾號(hào)聯(lián)系我獲取,或者+V 【yopa66】備注SSM 1.快速創(chuàng)建一個(gè)SpringBoot項(xiàng)目 項(xiàng)

    2024年02月01日
    瀏覽(25)
  • java基于RestTemplate的微服務(wù)發(fā)起http請(qǐng)求

    java基于RestTemplate的微服務(wù)發(fā)起http請(qǐng)求

    實(shí)現(xiàn)的效果

    2024年02月05日
    瀏覽(31)
  • SpringBoot中RestTemplate和WebClient的使用區(qū)別及優(yōu)缺點(diǎn)含完整代碼

    點(diǎn)擊下載《SpringBoot中RestTemplate和WebClient的使用區(qū)別及優(yōu)缺點(diǎn)含完整代碼》 本文將深入探討Spring Boot中RestTemplate和WebClient的用法、區(qū)別和優(yōu)缺點(diǎn)。通過(guò)具體的代碼示例,我們將詳細(xì)解釋這兩種HTTP客戶端的使用方法,并分析它們?cè)诓煌瑘?chǎng)景下的適用性。 RestTemplate是Spring框架中用

    2024年02月19日
    瀏覽(26)
  • Http請(qǐng)求實(shí)戰(zhàn) ---- 【restTemplate.exchange方法】的簡(jiǎn)單了解應(yīng)用

    RestTemple是Spring提供的用于訪問(wèn)Http請(qǐng)求的客戶端; 相對(duì)于apache的HTTPClient類,邏輯繁瑣,代碼復(fù)雜,還要自己編寫使用類HttpClientUtil,封裝對(duì)應(yīng)的post,get,delete等方法。 RestTemplate可以通過(guò)callback回調(diào)方法和配置HttpMessageConverter 來(lái)定制,用來(lái)把對(duì)象封裝到HTTP請(qǐng)求體,將響應(yīng)信息

    2024年02月13日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包