Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何基于两个Mono调用的响应调用反应式服务_Java_Netty_Webclient_Reactive - Fatal编程技术网

Java 如何基于两个Mono调用的响应调用反应式服务

Java 如何基于两个Mono调用的响应调用反应式服务,java,netty,webclient,reactive,Java,Netty,Webclient,Reactive,我有四个独立的反应式服务,我想将它们组合成一个端点。由于未知原因,它的行为出乎意料 第一次服务 public Mono<CreateClientResponse> createClient(CreateClientRequest createClientRequest) { return requester.createClient(createClientRequest); } 公共Mono createClient(CreateClientReque

我有四个独立的反应式服务,我想将它们组合成一个端点。由于未知原因,它的行为出乎意料

第一次服务

    public Mono<CreateClientResponse> createClient(CreateClientRequest createClientRequest) {
      return requester.createClient(createClientRequest);
    }
公共Mono createClient(CreateClientRequest CreateClientRequest){
返回请求者.createClient(createClientRequest);
}
第二个已经被嘲笑了:

    public Mono<Partner> getPartner() {
       return Mono.just(new Partner("435397"));
    }
公共Mono getPartner(){ 返回Mono.just(新合伙人(“435397”); } 第三:

    public Mono<ClientAdviserResponse> allocate(String clientId, Partner partner) {
      return requester.allocateHotLead(clientId, partner);
    }
public Mono-allocate(字符串clientId,Partner){
返回请求者。allocateHotLead(clientId,partner);
}
第四:

    public Mono<Void> createThread(int clientId) {
      return requester.createThread(clientId);
    }
public Mono-createThread(int-clientId){
返回请求者.createThread(clientId);
}
requester是一个使用WebClient创建和发送rest调用的对象。 单独来说,它的工作原理与预期相同,但我无法将它们合并到一个调用中。 当我使用此选项时:

    public Mono<CreateClientResponse> createLead(CreateClientRequest createClientRequest) {
      Mono<CreateClientResponse> createClientsResponse = createClient(createClientRequest);
      Mono<Partner> partner = getPartner();
      Mono.zip(createClientsResponse, partner)
          .doOnNext(this::allocateAndCreateThread)
          ;
      return createClientsResponse;
    }

    public Mono<Void> allocateAndCreateThread(Tuple2<CreateClientResponse, Partner> tuple) {
      String clientId = tuple.getT1().getId();
      allocate(clientId, tuple.getT2()).subscribe();
      createThread(Integer.parseInt(clientId)).subscribe();
      return Mono.empty();
    }
公共Mono createLead(CreateClientRequest CreateClientRequest){
Mono createClientsResponse=createClient(createClientRequest);
Mono partner=getPartner();
Mono.zip(createClientsResponse,partner)
.doOnNext(此::allocateAndCreateThread)
;
返回createClientsResponse;
}
公共Mono allocateAndCreateThread(Tuple2 tuple){
字符串clientId=tuple.getT1().getId();
分配(clientId,tuple.getT2()).subscribe();
createThread(Integer.parseInt(clientId)).subscribe();
返回Mono.empty();
}
未调用allocateAndCreateThread方法。但是,当我使用此选项时:

    public Mono<CreateClientResponse> createLead(CreateClientRequest createClientRequest) {
      Mono<CreateClientResponse> createClientsResponse = createClient(createClientRequest);
      Mono<Partner> partner = getPartner();
      Mono.zip(createClientsResponse, partner)
          .subscribe(this::allocateAndCreateThread)
          ;
      return createClientsResponse;
    }

    public Mono<Void> allocateAndCreateThread(Tuple2<CreateClientResponse, Partner> tuple) {
      String clientId = tuple.getT1().getId();
      allocate(clientId, tuple.getT2()).subscribe();
      createThread(Integer.parseInt(clientId)).subscribe();
      return Mono.empty();
    }
公共Mono createLead(CreateClientRequest CreateClientRequest){
Mono createClientsResponse=createClient(createClientRequest);
Mono partner=getPartner();
Mono.zip(createClientsResponse,partner)
.subscribe(此::allocateAndCreateThread)
;
返回createClientsResponse;
}
公共Mono allocateAndCreateThread(Tuple2 tuple){
字符串clientId=tuple.getT1().getId();
分配(clientId,tuple.getT2()).subscribe();
createThread(Integer.parseInt(clientId)).subscribe();
返回Mono.empty();
}
createClient被调用两次,但allocateAndCreateThread被调用

我做错了什么? 在配置中,Netty用作服务器