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