簡體   English   中英

兩個微服務之間的雙向通信(spring boot)

[英]Two way communication between two micro services (spring boot)

我有兩個微服務M1M2 ,我需要從M1M2發送請求,我需要等待M2的響應,因為代碼基於M2的響應工作 如何在spring boot中實現這個?

通過 controller 在您的 M1 微服務中創建 REST API 然后使用一些 ZDB93446A771 客戶端庫從 M2 調用它。

有很多方法可以做到這一點。 我建議您使用諸如Active MQRabbit MQKafka之類的消息傳遞工具在M1M2之間實現producer/consumer模式。

  1. M1向隊列Q1生成消息
  2. M2處理來自Q1的消息
  3. M2回復Q2
  4. M1消費來自Q2的消息

看看這里

您在 M2 中創建 REST API 將消耗或響應您來自 M1 的輸入

例如,您的 @RestController 中可能有以下端點,在 M2 中注釋 class:

@GetMapping("/consumer")
public ResponseEntity<YourResponseDTO> produceResponse(){
    YourResponseDTO result = resultOfYourBusinessLogic();
return ResponseEntity.ok(result);

然后在您的 M1 服務中,我認為最簡單的方法是使用 RestTemplate 調用 M2 這是一個示例:

RestTemplate rt = new RestTemplate();
YourResponseDTO result = rt.getForObject("http://urlOfYourM2/consumer", YourResponseDTO.class);

請注意,這只是生成“YourReponseDTO”Object 的 GET 請求的調用示例。 您提供的有關消息交換的實際需求的詳細信息非常少,因此 RestTemplate 可以以不同的方式使用(不同類型的請求 PUT/POST/等...)您可以根據需要使用錯誤處理程序、連接超時設置對其進行自定義等等

這種方法的缺點是您需要在 M1 和 M2 之間共享 DTO model 以正確 map 響應對象。 但無論如何,RestTemplate 是一個客戶端實現,您可以使用它在微服務之間進行同步通信

您可以使用聲明式 Rest 客戶端“Spring Cloud OpenFeign”進行同步通信,如下所示:

Spring Cloud - 與 Feign 同步通信

在大多數情況下,它總是建議在服務之間使用異步通信來保持它們的解耦。 如果您想為您的案例使用異步通信,您需要將雙向事件通道實現為@Harry Coder。 由於您等待立即響應,因此它需要實現諸如 SAGA、CAP 理論、斷路器之類的模式來為此類實現帶來可靠性,特別是您的案例。

如果立即響應至關重要,您可以使用同步通信,例如 API 調用或 gRPC。 如果您需要高性能和快速的通信 gRPC 值得為這些服務實施。 最好使用Mass Transit之類的庫來減少實現中的耦合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM