国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:3日期:2023-04-09 17:58:29

使用resilience4j的庫和Spring Boot設計高彈性的微服務。

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

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

重試模式:

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

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

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

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

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

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

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

設置:

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

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

我首先為resilience4j創(chuàng)建一個配置, 如下所示。在這里,我們將超時明確設置為3秒。我們可以在特定的超時時間內(nèi)添加多個服務。 我們可以有多種服務配置,如下所示。 對于ratingService,我們將最多進行3次重試,延遲5秒。 retryExceptions:這些是我們將重試的異常。這是一個數(shù)組字段。您可以配置多個例外。 ignoreExceptions:有些異常我們可能不想重試。例如,一個錯誤的請求就是一個錯誤的請求。重試沒有意義。因此,我們忽略了這一點。

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

代碼:

@Servicepublic 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í)行應用重試邏輯。 name = ratingService 表示 resilience4j 將使用yaml中的ratingService配置。 當main方法由于某種原因失敗時,將使用fallbackMethod。

總結

重試模式 是用于設計彈性微服務的最簡單的微服務 設計模式之一。引入重試可以解決與網(wǎng)絡相關的問題。

源代碼可 在此處獲得。

超時模式源碼可在此處獲得。

以上就是使用SpringBoot實現(xiàn)微服務超時重試模式的示例的詳細內(nèi)容,更多關于SpringBoot實現(xiàn)微服務超時的資料請關注好吧啦網(wǎng)其它相關文章!

標簽: Spring
相關文章:
主站蜘蛛池模板: 国产一级成人毛片 | 国产精品永久免费自在线观看 | 亚洲欧美一区二区久久香蕉 | 精品国产一区二区三区www | 精品91精品91精品国产片 | 欧美国产永久免费看片 | 久久精品一区二区三区中文字幕 | 黄色w站 | 毛片免费在线观看 | 久久y| 一区二区精品在线 | 九九国产精品视频 | 怡红院成人永久免费看 | 久久亚洲国产最新网站 | 亚洲国产2017男人a天堂 | 久草久草久草 | 97久久精品午夜一区二区 | 欧美激情国内自拍偷 | 大学生久久香蕉国产线观看 | 日韩 国产 欧美视频一区二区三区 | 亚洲精品一级一区二区三区 | 欧美精品国产精品 | 俄罗斯黄色毛片 | 手机看片国产精品 | 国产成人精品男人的天堂538 | 国产乱子伦片免费观看中字 | 久久精品亚洲一级毛片 | 看国产一级毛片 | 国产一区二区三区免费在线视频 | 国内成人精品亚洲日本语音 | 国产亚洲综合久久 | 日本亚洲综合 | 久久久久无码国产精品一区 | 国产精品高清视亚洲一区二区 | 国产亚洲高清在线精品99 | 欧美做爰野外在线视频观看 | 综合久久久久久中文字幕 | 日本护士一级毛片在线播放 | 国产成人国产在线观看入口 | 国产精品三级国语在线看 | 一级做a爰片欧美一区 |