欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用SpringBoot實(shí)現(xiàn)微服務(wù)超時(shí)重試模式的示例

 更新時(shí)間:2020年11月11日 08:41:45   作者:banq  
這篇文章主要介紹了使用SpringBoot實(shí)現(xiàn)微服務(wù)超時(shí)重試模式的示例,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下

使用resilience4j的庫和Spring Boot設(shè)計(jì)高彈性的微服務(wù)。

微服務(wù)本質(zhì)上是分布式的。當(dāng)您使用分布式系統(tǒng)時(shí),請始終記住這一第一法則- 網(wǎng)絡(luò)中可能發(fā)生任何事情。處理任何此類意外故障可能很難解決。故障可能是任何東西-應(yīng)用程序,硬件或網(wǎng)絡(luò)等。

系統(tǒng)從故障中恢復(fù)并保持正常運(yùn)行的能力使系統(tǒng)更具 彈性。它還避免了下游服務(wù)的任何級聯(lián)故障。

重試模式:

在微服務(wù)體系結(jié)構(gòu)中,當(dāng)有多個服務(wù)(A,B,C和D)時(shí),一個服務(wù)(A)可能依賴于另一服務(wù)(B),而另一服務(wù)(B)又可能依賴于C,依此類推。有時(shí)由于某些問題,服務(wù)D可能無法按預(yù)期響應(yīng)。服務(wù)D可能引發(fā)了某些異常,例如內(nèi)存不足 錯誤或內(nèi)部服務(wù)器錯誤。此類異常被級聯(lián)到下游服務(wù),這可能導(dǎo)致不良的用戶體驗(yàn),如下所示。

有時(shí),當(dāng)google.com對我們不起作用時(shí),我們只是不放棄。我們假設(shè)頁面下次可以正常工作,并且大多數(shù)情況下都會刷新頁面,因此只需刷新頁面即可。間歇性網(wǎng)絡(luò)問題非常普遍。在微服務(wù)領(lǐng)域,我們可能正在運(yùn)行同一服務(wù)D的多個實(shí)例,以實(shí)現(xiàn)高可用性和負(fù)載平衡。如果其中一個實(shí)例可能有問題,并且無法正確響應(yīng)我們的請求,則如果我們重試該請求,則負(fù)載均衡器可以將請求發(fā)送到運(yùn)行狀況良好的節(jié)點(diǎn)并正確獲得響應(yīng)。因此,使用“重試”選項(xiàng),我們有更多機(jī)會獲得正確的響應(yīng)。

讓我們考慮這個簡單的應(yīng)用程序來解釋此重試模式。

  • 如上所述,我們有多個微服務(wù)
  • 產(chǎn)品服務(wù)充當(dāng)產(chǎn)品目錄并負(fù)責(zé)提供產(chǎn)品信息
  • 產(chǎn)品服務(wù)取決于評級服務(wù)。
  • 評分服務(wù)維護(hù)產(chǎn)品評論和評分。 由于擁有大量數(shù)據(jù)而速度慢是眾所周知的。
  • 每當(dāng)我們查看產(chǎn)品詳細(xì)信息時(shí),產(chǎn)品服務(wù)就會將請求發(fā)送到評分服務(wù),以獲取該產(chǎn)品的評論。
  • 我們還有其他服務(wù),例如帳戶服務(wù),訂單服務(wù)和付款服務(wù)等,與本文的討論無關(guān)。
  • 產(chǎn)品服務(wù)是一項(xiàng)核心服務(wù),沒有它,用戶將無法啟動訂單工作流程。

設(shè)置:

<dependency>
    <groupId>io.github.resilience4j</groupId>
    <artifactId>resilience4j-spring-boot2</artifactId>
    <version>1.6.1</version>
</dependency>

產(chǎn)品服務(wù)負(fù)責(zé)根據(jù)用戶搜索條件提供產(chǎn)品列表。它是即使在關(guān)鍵負(fù)載下也應(yīng)該啟動和響應(yīng)的核心服務(wù)之一。如果下降,將嚴(yán)重影響收入。由于此服務(wù)取決于評級服務(wù),因此我們不希望任何網(wǎng)絡(luò)問題或評級服務(wù)不可用性影響此產(chǎn)品服務(wù)。這就是使用 resilience4j 庫的目的。

  • 我首先為resilience4j創(chuàng)建一個配置,  如下所示。在這里,我們將超時(shí)明確設(shè)置為3秒。我們可以在特定的超時(shí)時(shí)間內(nèi)添加多個服務(wù)。
  • 我們可以有多種服務(wù)配置,如下所示。
  • 對于ratingService,我們將最多進(jìn)行3次重試,延遲5秒。
  • retryExceptions:這些是我們將重試的異常。這是一個數(shù)組字段。您可以配置多個例外。
  • ignoreExceptions:有些異常我們可能不想重試。例如,一個錯誤的請求就是一個錯誤的請求。重試沒有意義。因此,我們忽略了這一點(diǎn)。
resilience4j.retry:
  instances:
    ratingService:
      maxRetryAttempts: 3
      waitDuration: 5s
      retryExceptions:
        - org.springframework.web.client.HttpServerErrorException
      ignoreExceptions:
        - org.springframework.web.client.HttpClientErrorException
    someOtherService:
      maxRetryAttempts: 3
      waitDuration: 10s
      retryExceptions:
        - org.springframework.web.client.HttpServerErrorException
        - java.io.IOException

代碼:

@Service
public class RatingServiceClient {

    private final RestTemplate restTemplate = new RestTemplate();

    @Value("${rating.service.endpoint}")
    private String ratingService;

    @Retry(name = "ratingService", fallbackMethod = "getDefault")
    public CompletionStage<ProductRatingDto> getProductRatingDto(int productId){
        Supplier<ProductRatingDto> supplier = () ->
            this.restTemplate.getForEntity(this.ratingService + productId, ProductRatingDto.class)
                    .getBody();
        return CompletableFuture.supplyAsync(supplier);
    }

    private CompletionStage<ProductRatingDto> getDefault(int productId, HttpClientErrorException throwable){
        return CompletableFuture.supplyAsync(() -> ProductRatingDto.of(0, Collections.emptyList()));
    }

}

代碼解釋:

  • @Retry表示resilience4j將對該方法執(zhí)行應(yīng)用重試邏輯。
  • name = ratingService 表示 resilience4j 將使用yaml中的ratingService配置。
  •  當(dāng)main方法由于某種原因失敗時(shí),將使用fallbackMethod。

總結(jié)

重試模式 是用于設(shè)計(jì)彈性微服務(wù)的最簡單的微服務(wù) 設(shè)計(jì)模式之一。引入重試可以解決與網(wǎng)絡(luò)相關(guān)的問題。

源代碼可 在此處獲得。

超時(shí)模式源碼可在此處獲得。

以上就是使用SpringBoot實(shí)現(xiàn)微服務(wù)超時(shí)重試模式的示例的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot實(shí)現(xiàn)微服務(wù)超時(shí)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringMVC超詳細(xì)介紹自定義攔截器

    SpringMVC超詳細(xì)介紹自定義攔截器

    Spring?MVC?的攔截器(Interceptor)與?Java?Servlet?的過濾器(Filter)類似,它主要用于攔截用戶的請求并做相應(yīng)的處理,通常應(yīng)用在權(quán)限驗(yàn)證、記錄請求信息的日志、判斷用戶是否登錄等功能上。本文將代碼演示和文字描述詳解攔截器的原理與使用
    2022-06-06
  • 深入jetty的使用詳解

    深入jetty的使用詳解

    本篇文章是對jetty的使用進(jìn)行了詳細(xì)的分析解釋。需要的朋友參考下
    2013-05-05
  • 淺談java多線程wait,notify

    淺談java多線程wait,notify

    這篇文章主要介紹了java多線程wait,notify,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面小編和大家一起來學(xué)習(xí)一下吧
    2019-05-05
  • Mybatis使用useGeneratedKeys獲取自增主鍵

    Mybatis使用useGeneratedKeys獲取自增主鍵

    這篇文章主要為大家介紹了Mybatis使用useGeneratedKeys獲取自增主鍵示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 使用mybatis切片實(shí)現(xiàn)數(shù)據(jù)權(quán)限控制的操作流程

    使用mybatis切片實(shí)現(xiàn)數(shù)據(jù)權(quán)限控制的操作流程

    數(shù)據(jù)權(quán)限控制需要對查詢出的數(shù)據(jù)進(jìn)行篩選,對業(yè)務(wù)入侵最少的方式就是利用mybatis或者數(shù)據(jù)庫連接池的切片對已有業(yè)務(wù)的sql進(jìn)行修改,本文給大家介紹了使用mybatis切片實(shí)現(xiàn)數(shù)據(jù)權(quán)限控制的操作流程,需要的朋友可以參考下
    2024-07-07
  • springCloud項(xiàng)目搭建流程步驟分解

    springCloud項(xiàng)目搭建流程步驟分解

    SpringCloud 作為當(dāng)下最為流行的微服務(wù)框架,也越來越多的人去學(xué)習(xí)和使用這個框架。下面,我將帶大家簡單地認(rèn)識一下 SpringCloud 框架,以及如何來搭建一個 SpringCloud 項(xiàng)目環(huán)境的教程
    2022-05-05
  • java字符串的合并

    java字符串的合并

    合并兩個字符串,如:str1 ="001,002,003,004,006",str2 = "001,002,005" 合并后應(yīng)該是"001,002,003,004,005,006"。
    2008-10-10
  • java內(nèi)存分布實(shí)現(xiàn)代碼

    java內(nèi)存分布實(shí)現(xiàn)代碼

    這篇文章主要介紹了淺談Java內(nèi)存區(qū)域劃分和內(nèi)存分配策略,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • java mybatis框架配置詳解

    java mybatis框架配置詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于java mybatis框架配置詳解內(nèi)容,對此有興趣的朋友們可以參考下。
    2021-02-02
  • java如何發(fā)送get請求獲取數(shù)據(jù)(附代碼)

    java如何發(fā)送get請求獲取數(shù)據(jù)(附代碼)

    這篇文章主要給大家介紹了關(guān)于java如何發(fā)送get請求獲取數(shù)據(jù)的相關(guān)資料,Java中的GET請求方法是HTTP協(xié)議中的一種請求方式,用于向服務(wù)器請求獲取資源,需要的朋友可以參考下
    2023-10-10

最新評論