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

问题描述

我有四个独立的响应式服务,我想将它们组合到一个端点中。由于未知原因,它的行为异常。

第一项服务

    public Mono<CreateClientResponse> createClient(CreateClientRequest createClientRequest) {
      return requester.createClient(createClientRequest);
    }

第二个已经被嘲笑了

    public Mono<Partner> getPartner() {
       return Mono.just(new Partner("435397"));
    }

第三:

    public Mono<ClientAdviserResponse> allocate(String clientId,Partner partner) {
      return requester.allocateHotLead(clientId,partner);
    }

第四:

    public Mono<Void> createThread(int clientId) {
      return requester.createThread(clientId);
    }

requester是一个对象,该对象使用WebClient创建并发送休息呼叫。 另外,它可以按预期工作,但我无法将它们合并为一个呼叫。 当我使用此功能时:

    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();
    }

调用方法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,tuple.getT2()).subscribe();
      createThread(Integer.parseInt(clientId)).subscribe();
      return Mono.empty();
    }

createClient被调用两次,但被调用allocateAndCreateThread。

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)