![](/img/trans.png)
[英]What is best approach to share a utility class between multiple microservices?
[英]What is the best approach or design pattern to call multiple microservices several times from a single service?
微服務 A 依賴於微服務 B & C。 當客戶端調用服務 A 上的某個端點時,這將導致從 A 到服務 B 和 C 的多個 HTTP 請求以獲取依賴項的詳細信息。 同時處理這種情況的最佳、性能有效的設計模式或方法是什么?
注意:在這種情況下我們沒有使用 API 網關。
根據您的問題,我認為沒有能力利用基於事件的/反應式方法,並且已經根據此處考慮的權衡做出架構決策(請注意,在此來源中,下面提出的方法被稱為“混合”)。
編排
在這些條件下,您要查找的模式稱為Orchestration 。 查看這個很棒的答案以獲得更廣泛的概述。
快速回顧一下,您可以使用Spring Integration 之類的東西來實現以下關鍵點:
更新 - 依賴於客戶端Reactor 模式的實現
如果您可以使用 Spring 5/Spring Boot 2.x,您還可以使用基於Project Reactor 的Spring WebFlux以響應方式調用 B&C 來實現上述幾點。
從原理上講,您可以執行以下操作:
@Service
public class MyService {
private final WebClient webClient;
...
public Mono<Details> someRestCall(String name) {
return this.webClient.get().url("{name}/details", name)
.retrieve().bodyToMono(ResponseEntity.class);
}
}
...
Mono<ResponseEntity> b1 = myService.someRestCall("serviceB");
Mono<ResponseEntity> c1 = myService.someRestCall("serviceC");
Mono<ResponseEntity> b2 = myService.someOtherRestCall("serviceB");
ResponseEntity response = Flux
.parallel(NUM_CPUS)
.merge(b1, c1, b2)
.limitRequest(MAX_REQUESTS)
.onErrorReturn(ERR_RESPONSE_ENTITY)
.blockLast(CUTOFF_TIMEOUT);
(基於這個例子)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.