[英]Two way communication between two micro services (spring boot)
我有兩個微服務M1和M2 ,我需要從M1向M2發送請求,我需要等待M2的響應,因為代碼基於M2的響應工作 如何在spring boot
中實現這個?
通過 controller 在您的 M1 微服務中創建 REST API 然后使用一些 ZDB93446A771 客戶端庫從 M2 調用它。
有很多方法可以做到這一點。 我建議您使用諸如Active MQ
、 Rabbit MQ
或Kafka
之類的消息傳遞工具在M1和M2之間實現producer/consumer
模式。
看看這里。
您在 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”進行同步通信,如下所示:
在大多數情況下,它總是建議在服務之間使用異步通信來保持它們的解耦。 如果您想為您的案例使用異步通信,您需要將雙向事件通道實現為@Harry Coder。 由於您等待立即響應,因此它需要實現諸如 SAGA、CAP 理論、斷路器之類的模式來為此類實現帶來可靠性,特別是您的案例。
如果立即響應至關重要,您可以使用同步通信,例如 API 調用或 gRPC。 如果您需要高性能和快速的通信 gRPC 值得為這些服務實施。 最好使用Mass Transit之類的庫來減少實現中的耦合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.