Spring WebFlux Mono.block()即使未发生超时,也不会返回任何响应

Spring WebFlux Mono.block()即使未发生超时,也不会返回任何响应,spring,spring-boot,spring-webflux,Spring,Spring Boot,Spring Webflux,在那里,我试图从我的Mongo存储库中获取Mono。但是,我的调试器在作为Mono对象从repo接收响应并对其应用block()后丢失 下面是详细的代码 private Map<String, Object> parameters(Bid bid,String tripId) { final Map<String, Object> parameters = new HashMap<>(); ShipperLoad shipperLoad = (

在那里,我试图从我的Mongo存储库中获取Mono。但是,我的调试器在作为Mono对象从repo接收响应并对其应用block()后丢失

下面是详细的代码

private Map<String, Object> parameters(Bid bid,String tripId) {
    final Map<String, Object> parameters = new HashMap<>();
    ShipperLoad shipperLoad = (ShipperLoad)bid.getLoad();

    // getting supplier data from other service..
    SupplierUserDTO supplier =
            WebClient.
                    create("http://localhost:8888/XXXXXXXX/"+bid.getSupplierId())
                    .get()
                    .retrieve()
                    .bodyToMono(SupplierUserDTO.class)
                    .block();

    TripInvoiceDetails tripInvoice = bidService.getInvoiceDetails(tripId).block();

    parameters.put("load", shipperLoad);
    parameters.put("bid", bid);
    parameters.put("logo", getClass().getResourceAsStream(logo_path));
    parameters.put("supplier", supplier);
    parameters.put("invoice", tripInvoice);

    return parameters;
}
私有映射参数(Bid-Bid、String-tripId){
最终映射参数=new HashMap();
ShipperLoad ShipperLoad=(ShipperLoad)bid.getLoad();
//正在从其他服务获取供应商数据。。
供应商用户到供应商=
网络客户端。
创建(”http://localhost:8888/XXXXXXXX/“+bid.getSupplierId())
.get()
.retrieve()
.bodytomino(SupplierUserDTO.class)
.block();
TripInvoiceDetails tripInvoice=bidService.getInvoiceDetails(tripId.block();
参数。放置(“装载”,shipperLoad);
参数。put(“投标”,投标);
parameters.put(“logo”,getClass().getResourceAsStream(logo_path));
参数。输入(“供应商”,供应商);
参数.put(“发票”,tripInvoice);
返回参数;
}
投标服务方式:

public Mono<TripInvoiceDetails> getInvoiceDetails(String tripId)
{
    Mono<TripInvoiceDetails> invoice = tripInvoiceRepository.findByTripId(tripId);
    return invoice;
}
公共Mono getInvoiceDetails(字符串tripId) { Mono invoice=tripInvoiceRepository.findByTripId(tripId); 退货发票; } 存储库

public interface TripInvoiceRepository extends ReactiveMongoRepository<TripInvoiceDetails, String>{
    Mono<TripInvoiceDetails> findByTripId(String tripId);
}
公共接口TripInvoiceRepository扩展了ReactiveMongoRepository{
Mono-findByTripId(字符串tripId);
}
控件在bidService.getInvoiceDetails(tripId.block()上丢失

TripInvoiceDetails.java
@资料
@单据(“发票”)
@诺尔格构装师
@AllArgsConstructor
公共类TripInvoiceDetails{
@身份证
字符串id;
字符串发票编号;
双倍发票金额;
双重发票金额GST;
ValueLabel packageType;
整数努弗尼茨;
值标签材料类型;
列出材料类型二级;
字符串hsnCode;
字符串收货人名称;
字符串地址;
串珠蛋白;
弦三角;
字符串传输ID;
字符串shipperName;
字符串loadId;
}

决心

try {
        //pls don't remove futureData since. it is required to resolve futureData of Mono..
        CompletableFuture<TripInvoiceDetails>  futureData = tripInvoice.toFuture();
        invoice = tripInvoice.toFuture().get();
    } catch (Exception  e) {
        e.printStackTrace();
    }
试试看{
//请不要删除futureData,因为它需要解析Mono的futureData。。
CompletableFutureData=tripInvoice.toFuture();
发票=tripInvoice.toFuture().get();
}捕获(例外e){
e、 printStackTrace();
}

谢谢大家宝贵的回复。最后,我得到了一个解决方案,我只是将.bock()方法分解成几个步骤,这意味着该方法执行了.block()方法的精确实现,而不是调用.block()。对我来说,这是可行的,可能前面案例中的块正在等待任何生产者,在本例中可能没有标记为生产者

try {
    //pls don't remove futureData since. it is required to resolve futureData of Mono..
    CompletableFuture<TripInvoiceDetails>  futureData = tripInvoice.toFuture();
    invoice = tripInvoice.toFuture().get();
} catch (Exception  e) {
    e.printStackTrace();
}
试试看{
//请不要删除futureData,因为它需要解析Mono的futureData。。
CompletableFutureData=tripInvoice.toFuture();
发票=tripInvoice.toFuture().get();
}捕获(例外e){
e、 printStackTrace();
}

您等了多久?可能默认超时很高。嗨,我让通话进行了1小时。在没有响应后,我强制完全终止它。我在这里添加屏幕截图。。没有控制台日志或错误记录在那里。请参阅添加的日志很多,问题解决,当我中断。block()语句插入,请参阅所附的代码段。。
try {
    //pls don't remove futureData since. it is required to resolve futureData of Mono..
    CompletableFuture<TripInvoiceDetails>  futureData = tripInvoice.toFuture();
    invoice = tripInvoice.toFuture().get();
} catch (Exception  e) {
    e.printStackTrace();
}