当前位置: 首页 > 知识库问答 >
问题:

如何调试从未完成单声道

屠浩
2023-03-14

有些方法返回mono 。这是一个典型的模式,分多个层:

fun workflowStep(things: List<Thing>): Mono<Void> =
    Flux.fromIterable(things).flatMap { thing -> doSomethingTo(thing) }.collectList().then()

假设doSomethingto()返回一个单字 (它向数据库写入一些内容,发送一条消息等)。如果我只是用mono.empty()替换它,那么一切都按预期工作,否则就不是这样了。更具体地说,单声道从未完成,它贯穿所有处理,但在结束时错过了终止信号。所以这些东西实际上是写在数据库中的,消息实际上是发送的,等等。

为了证明没有终止是问题所在,这里有一个有效的黑客:

val hackedDelayedMono = Mono.empty<Void>().delayElement(Duration.ofSeconds(1))
return Mono.first(
    workflowStep(things),
    hackedDelayedMono
)
    null

我不能在应用程序之外用简单的单工作流复制这种行为。

共有1个答案

彭修筠
2023-03-14

通过在反应流中使用log()运算符,可以跟踪和记录流中的事件。这对于更好地了解应用程序中发生的事件非常有用。

Flux.fromIterable(things)
    .flatMap(thing -> doSomethingTo(thing))
    .log()
    .collectList()
    .then()

它链接在一个序列中,窥视它上游的流量或单声道的每个事件(包括onNext、onError和onComplete以及订阅、取消和请求)。

Reactor参考文献。记录a序列

 类似资料:
  • 我创建了一个简单的Kafka使用者,它返回一个对象流(接收到的消息),我试图使用测试它。 在我的测试中,我做了类似的事情: 断言工作正常(如果将值从更改为其他值,则测试失败)。但是,如果断言通过,测试永远不会退出。 我还尝试使用方法,如下所示: 在本例中,我得到以下错误: 你知道我做错了什么吗?

  • 我有一个类,它从通量源填充地图。我希望能够动态地更新thedata(),但我希望能够返回解析为当前或挂起数据的Mono。 基本上如果数据!=null和no in progress flux,返回Mono。仅返回(数据),否则返回最终将发出数据的单声道。 编辑:这是目前为止我能做的最好的了 但是仍然存在一个问题,在第一次完成updateTheData()之前,

  • 我想要一个完整的未来,只发出完成的信号(例如,我没有返回值)。 我可以将CompletableFuture实例化为: 但是我应该向完整的方法提供什么呢?例如,我不能做

  • 问题内容: 由于某种原因,我完成后没有被调用。 我的班级干事: 我的onPostExecute(): 一切正常,我成功完成并返回一个布尔值,但随后就结束了。 谢谢 问题答案: 您是否在UI线程上创建了AsyncTask?还要在onPostExecute()方法上添加一个@Override注释,以确保正确声明了它。

  • 问题内容: 我正在尝试从python脚本调用我的MSSQL数据库中的存储过程,但是通过python调用时它无法完全运行。此过程将交易数据合并到单个表中的小时/每日块中,稍后由python脚本抓取。如果我在SQL Studio中运行该过程,则可以正常完成。 当我通过脚本运行它时,它会缩短大约2/3的时间。目前,我已经找到一种解决方法,方法是使程序在进入下一个SQL语句之前先休眠10秒钟,但是这样做并

  • 现在我想对这个函数进行单元测试。我正在使用Mockk: 不幸的是,由于以下异常,此测试失败: 我尝试用替换,但测试似乎在无限循环中等待。 有人能帮我弄一下这个吗? 提前致谢