使用spring webflux和hystrix进行并发调用

希望有人可以引导我朝着正确的方向发展,以将我的代码转变为更具响应性的服务呼叫。对于后台,我有一个前面的函数,它将生成一个用户列表,然后将使用该列表为列表中的每个用户调用此getUserDetails函数,并返回用户+详细信息的映射或列表。

@HystrixCommand(commandKey = "getUserDetails")
  public getUserResponse getUserDetails(userRequest request) {
    getUserResponse response = webClient.post()
        .uri(uri)
        .body(BodyInserters.fromObject(request))
        .retrieve()
        .onStatus(HttpStatus::isError,resp -> resp.bodyToMono(getUserError.class).map(errorHandler::mapRequestErrors))
        .bodyToMono(getUserResponse.class).block();

    return response;
  }

理想情况下,我也将替换/删除错误映射,仅与记录返回的错误响应并继续有关。 到目前为止,我已经想到了一些类似的方法,但是我不确定webflux / hystrix是否会表现出色?

@HystrixCommand(commandKey = "getUserDetails",fallbackMethod = "getUserFallback")
  public Mono<getUserResponse> getUserDetails(userRequest request) {
    return = webClient.post()
        .uri(uri)
        .body(BodyInserters.fromObject(request))
        .retrieve()
        .bodyToMono(getUserResponse.class);
  }

  @HystrixCommand
  public Mono<getUserResponse> getUserFallback(userRequest request,Throwable throwable) {
    log.error(//contents of error message returned)
    return mono.empty();
  }

public Flux<UserMap> fetchUserDetails(List<Integer> userIds) {
    return Flux.fromIterable(userIds)
        .parallel()
        .runOn(Schedulers.elastic())
    .flatMap(userDetailsRepository::getUserDetails);
}
a962319828 回答:使用spring webflux和hystrix进行并发调用

Hystrix已过时。如果有机会,请转到支持Webflux / Reactor的resilience4j

Spring还为弹性4j提供了专门的支持。

关于错误处理,您可以利用Mono / Flux API中丰富的运算符集,例如onErrorReturnonErrorResume

本文链接:https://www.f2er.com/2679780.html

大家都在问