Spring响应:服务方法调用无法返回响应

Spring响应:服务方法调用无法返回响应,spring,java-8,reactive-programming,spring-webflux,spring-reactive,Spring,Java 8,Reactive Programming,Spring Webflux,Spring Reactive,试图通过在中间包含一个小的验证来重写一个工作的反应函数。 不幸的是,即使计算在后端完成,程序也无法完成请求。 此外,如果有人能告诉我是否有任何不必要的编码实践与反应式编程相关,那将是非常棒的 处理程序函数,从中调用反应式服务 公共Mono性能验证(服务器请求服务器请求){ Mono-request=serverRequest.bodytomino(request.class); 返回ServerResponse.ok() .body(service1.performValidation(boun

试图通过在中间包含一个小的验证来重写一个工作的反应函数。 不幸的是,即使计算在后端完成,程序也无法完成请求。 此外,如果有人能告诉我是否有任何不必要的编码实践与反应式编程相关,那将是非常棒的

  • 处理程序函数,从中调用反应式服务

    公共Mono性能验证(服务器请求服务器请求){
    Mono-request=serverRequest.bodytomino(request.class);
    返回ServerResponse.ok()
    .body(service1.performValidation(boundaryCheckRequest,“”),ServiceResponse.class)
    //.body(service1.performValidation_Working(boundaryCheckRequest,“”),serviceress.class)
    .OneRorResume(异常.class,
    e->ServerResponse.status(HttpStatus.INTERNAL\u SERVER\u错误)
    .body(Mono.just(e.getMessage()),String.class));}
    
  • 处理程序调用下面的服务,下面的代码段出现问题

    公共单声道性能验证(单声道请求单声道,字符串令牌){
    返回Mono.create(monoSink->{
    requestMono.map(triggerRequest->{
    返回checkValidOrders(triggerRequest)?doValidations(requestMono,token).subscribe():Mono.just(new ServiceResponse()).subscribe();
    }).subscribe();
    });
    }
    私有Mono doValidations(ServiceRequest请求、字符串令牌){
    RequestHolder RequestHolder=新的RequestHolder(请求,令牌);
    ServiceResponseObject serviceBus=新的ServiceResponseObject();
    返回Mono.create(monoSink->{
    通量合并(
    getServiceOne(请求持有人,serviceBus),
    getServiceTwo(请求持有者,serviceBus)
    )
    .doOnNext(completedFlag->{
    })
    .doOnComplete(()->{
    ServiceResponse ServiceResponse=validationService.validate(serviceBus,requestHolder.getRequest());
    monoSink.success(ServiceResponse);
    })
    .doon错误(可丢弃->{
    monoSink.success(handleError(throwable,requestHolder));
    })
    .subscribe();
    });
    }
    专用布尔校验校验器(ServiceRequest tr){
    返回tr.getLines().stream().anyMatch(line->!line.getStatus().equals(“ACIVE”);
    }   
    
  • 服务代码的工作版本
    无法找出请求处理未结束的原因,敬请告知

    我可以看到你打电话订阅,你不应该那样做。让spring按照以下步骤订阅顶部Mono/Flux和chain-read平面图<代码>请求.flatMap(请求->服务1.performValidation(请求“”).flatMap(validatedRequest->…好的,这是我见过的最混乱、反应式的代码示例之一。我有很多问题。什么是
    getServiceOne
    和什么是
    getServiceTwo
    你能不能从高层解释一下,你收到一个请求,你想验证请求中有几行是active,然后呢?什么是
    validationService.validate
    以及为什么要订阅?@Thomas Andolf,非常感谢您的友好回复。我刚刚开始了被动的,请原谅:)。调用getServiceOne和getServiceOne从两个外部服务获取数据(Flux.merge用于在继续验证服务之前收集所有必需的数据)这是validationService完成验证所必需的。谢谢。
        public Mono<ServiceResponse> performValidation_Working(Mono<ServiceRequest> requestMono,String token) {
            return Mono.create(monoSink -> {
                requestMono.map((triggerReq)->
                {
                    return new RequestHolder(request,token);
                })
                .subscribe(servicesRequestHolder -> {
                    ServiceResponseObject serviceBus=new ServiceResponseObject();
                    Flux.merge(
                            getServiceOne(requestHolder, serviceBus),
                            getServiceTwo(requestHolder, serviceBus)
                    )
                        .doOnNext(completedFlag -> { })
                        .doOnComplete(()->{
                            ServiceResponse ServiceResponse = validationService.validate(serviceBus, requestHolder.getRequest());
                            monoSink.success(ServiceResponse);
                        })
                        .doOnError(throwable -> {
                            monoSink.success(handleError(throwable,servicesRequestHolder));
                        })
                        .subscribe();
                });
            });
        }