最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

重試模式:

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

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

讓我們考慮這個(gè)簡(jiǎn)單的應(yīng)用程序來(lái)解釋此重試模式。

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

設(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)該啟動(dòng)和響應(yīng)的核心服務(wù)之一。如果下降,將嚴(yán)重影響收入。由于此服務(wù)取決于評(píng)級(jí)服務(wù),因此我們不希望任何網(wǎng)絡(luò)問(wèn)題或評(píng)級(jí)服務(wù)不可用性影響此產(chǎn)品服務(wù)。這就是使用 resilience4j 庫(kù)的目的。

  • 我首先為resilience4j創(chuàng)建一個(gè)配置,  如下所示。在這里,我們將超時(shí)明確設(shè)置為3秒。我們可以在特定的超時(shí)時(shí)間內(nèi)添加多個(gè)服務(wù)。
  • 我們可以有多種服務(wù)配置,如下所示。
  • 對(duì)于ratingService,我們將最多進(jìn)行3次重試,延遲5秒。
  • retryExceptions:這些是我們將重試的異常。這是一個(gè)數(shù)組字段。您可以配置多個(gè)例外。
  • ignoreExceptions:有些異常我們可能不想重試。例如,一個(gè)錯(cuò)誤的請(qǐng)求就是一個(gè)錯(cuò)誤的請(qǐng)求。重試沒(méi)有意義。因此,我們忽略了這一點(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將對(duì)該方法執(zhí)行應(yīng)用重試邏輯。
  • name = ratingService 表示 resilience4j 將使用yaml中的ratingService配置。
  •  當(dāng)main方法由于某種原因失敗時(shí),將使用fallbackMethod。

總結(jié)

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

源代碼可 在此處獲得。

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

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

相關(guān)文章

  • java題解LeetCode20.有效的括號(hào)

    java題解LeetCode20.有效的括號(hào)

    這篇文章主要為大家介紹了java題解LeetCode20.有效的括號(hào)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Mybatis中 XML配置詳解

    Mybatis中 XML配置詳解

    這篇文章主要介紹了Mybatis中 XML配置詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-01-01
  • 詳解如何使用java實(shí)現(xiàn)Open Addressing

    詳解如何使用java實(shí)現(xiàn)Open Addressing

    這篇文章主要介紹了詳解如何使用java實(shí)現(xiàn)Open Addressing,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • springboot默認(rèn)掃描的路徑方式

    springboot默認(rèn)掃描的路徑方式

    這篇文章主要介紹了springboot默認(rèn)掃描的路徑方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 全面解析Java中的注解與注釋

    全面解析Java中的注解與注釋

    這篇文章主要介紹了Java中的注解與注釋,簡(jiǎn)單來(lái)說(shuō)注解以@符號(hào)開頭而注釋被包含在/***/符號(hào)中,各自具體的作用則來(lái)看本文詳解,需要的朋友可以參考下
    2016-05-05
  • Java多線程常見案例分析線程池與單例模式及阻塞隊(duì)列

    Java多線程常見案例分析線程池與單例模式及阻塞隊(duì)列

    這篇文章主要介紹了多線程的常見案例,線程池(重點(diǎn))、單例模式、阻塞隊(duì)列,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 教你怎么用Java回溯算法解數(shù)獨(dú)

    教你怎么用Java回溯算法解數(shù)獨(dú)

    一直不太會(huì)數(shù)獨(dú)問(wèn)題,這次下決定搞明白,所以整理了本篇文章,文中有非常詳細(xì)的代碼示例,對(duì)不會(huì)算法的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • Java通過(guò)正則表達(dá)式獲取字符串中數(shù)字的方法示例

    Java通過(guò)正則表達(dá)式獲取字符串中數(shù)字的方法示例

    最近工作中遇到了一個(gè)需求,需要利用java獲取字符串中的數(shù)字,嘗試幾種方法后發(fā)現(xiàn)利用正則表達(dá)式實(shí)現(xiàn)最為方法,下面這篇文章就主要介紹了Java通過(guò)正則表達(dá)式獲取字符串中數(shù)字的方法,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考下。
    2017-03-03
  • 出現(xiàn)log.info報(bào)紅的解決方案

    出現(xiàn)log.info報(bào)紅的解決方案

    這篇文章主要介紹了出現(xiàn)log.info報(bào)紅的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 解析Java多線程之常見鎖策略與CAS中的ABA問(wèn)題

    解析Java多線程之常見鎖策略與CAS中的ABA問(wèn)題

    本篇文章介紹了常見的鎖策略,并說(shuō)明了synchronized關(guān)鍵字加的鎖類型不是單一一種鎖類型的,根據(jù)可重入鎖與非可重入鎖引出了死鎖的概念與死鎖條件,最后介紹了CAS指令以及CAS鎖產(chǎn)生的ABA問(wèn)題及其解決方案,需要的朋友可以參考下
    2022-06-06

最新評(píng)論

嘉义县| 大城县| 溆浦县| 宁强县| 正定县| 肥东县| 宜春市| 正安县| 左云县| 烟台市| 皮山县| 新营市| 收藏| 仁布县| 利川市| 左权县| 桦川县| 瑞金市| 石阡县| 绵竹市| 东阿县| 元谋县| 红安县| 子长县| 板桥市| 隆昌县| 慈溪市| 且末县| 沈丘县| 顺义区| 电白县| 融水| 新疆| 卢龙县| 衡南县| 濮阳县| 全南县| 永胜县| 固阳县| 惠州市| 德阳市|