【问题标题】:Spring WebFlux Mono.block() is not returning any response even no time out occured即使没有发生超时,Spring WebFlux Mono.block() 也不会返回任何响应
【发布时间】:2020-10-29 13:19:32
【问题描述】:

我曾尝试从我的 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;
}

投标服务方式:

public Mono<TripInvoiceDetails> getInvoiceDetails(String tripId)
{
    Mono<TripInvoiceDetails> invoice = tripInvoiceRepository.findByTripId(tripId);
    return invoice;
}

存储库

public interface TripInvoiceRepository extends ReactiveMongoRepository<TripInvoiceDetails, String>{
    Mono<TripInvoiceDetails> findByTripId(String tripId);
}

bidService.getInvoiceDetails(tripId).block(); 失去控制权

TripInvoiceDetails.java
@Data
@Document("tripInvoice")
@NoArgsConstructor
@AllArgsConstructor
public class TripInvoiceDetails {
@Id
String id;
String invoiceNo;
Double invoiceamount;
Double invoiceamountGst;
ValueLabel packageType;
Integer noOfUnits;
ValueLabel materialType;
List<ValueLabel> materialTypeSecondary;
String hsnCode;
String consigneeName;
String address;
String gstOrPan;
String tripId;
String transporterId;
String shipperName;
String loadId;

}

console log

已解决

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

【问题讨论】:

  • 你等了多久?也许默认超时非常高。
  • 您好,我将通话进行到 1 小时。在没有响应后,我强制完全终止它。
  • 我在这里添加屏幕截图.. 没有控制台日志或错误记录在那里。请参考添加的日志
  • 非常感谢,问题已解决,当我休息时。 block() 语句插入请看附件代码 sn-p..

标签: spring spring-boot spring-webflux


【解决方案1】:

感谢大家的宝贵回复。最后,我得到了一个解决方案,我只是将 .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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 2012-12-08
    相关资源
    最近更新 更多