sha*_*njo 3 java spring-mvc spring-boot microservices
微服务 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);
Run Code Online (Sandbox Code Playgroud)
(基于这个例子)
| 归档时间: |
|
| 查看次数: |
8351 次 |
| 最近记录: |