Spring Boot 2 WebClient获取订阅者

时间:2018-05-23 05:05:36

标签: spring spring-boot reactive-programming spring-webflux spring-web

我正在使用WebClient来调用外部API,我正在为每个请求关联一个requestId。处理完请求并收到响应后,我正在使用requestId更新一些表,以便我可以确认处理与requestId相关的所有数据。

public void getEmployeeData(List<Integer>employeeIds, String requestId){
   WebClient webClient = WebClient.builder().baseUrl(baseUrl).build();

   webClient.post().uri(uri)
            .contentType(MediaType.APPLICATION_JSON_UTF8)
            .accept(MediaType.APPLICATION_JSON_UTF8)
            .header(HttpHeaders.AUTHORIZATION, "Basic " + Base64Utils
            .encodeToString((plainCreds)
            .getBytes(Charset.defaultCharset())))
            .body(BodyInserters.fromObject(body)).retrieve()
            .bodyToFlux(EmployeeInfo.class)
            .doOnError(throwable -> {
               Mono.error(throwable);
            }).subscribe(new Consumer<EmployeeInfo>() {
                @Override
                public void accept(EmployeeInfo employeeInfo) {
                    // Here I need the requestId which is passed as function 
                    //parameter
              }
            }); 
}

上面的函数接收带有请求的员工ID列表,我必须调用外部API来获取员工列表的信息,在调用此函数之前我将所有员工列表保存在请求者中,这样一次收到响应我可以更新表,说明已收到给定requestId的所有员工信息。现在在订户部分我需要requestId,以便我可以关联收到的响应属于特定的请求

1 个答案:

答案 0 :(得分:2)

您可以在requestId上添加final,以便它可以在您的订阅功能上使用。

public void getEmployeeData(List<Integer>employeeIds, final String requestId){