java - 单声道/通量 : how to suspend thread and wait for event or timeout

标签 java kotlin project-reactor

我想请教如何解决 Mono/Flux 通过延迟或超时暂停和重新激活的问题。

任务是:应用程序将接收 HTTP 请求并应提供响应。

当使用异步套接字接收到请求时,应发送消息。我们需要等待具体的答复,但不超过 30 秒。

所以我需要暂停线程,直到调用一些 Runnable,或者其他选项是每 0.2 秒查询某个变量,如果它设置为相关值,则继续该过程。

你能给我一些建议吗?

谢谢

最佳答案

我认为您需要使用 Mono/Flux 中的超时方法来设置该行为。例子:

yourMonoOrFlux.timeout(Duration.ofSeconds(30))
              .onErrorResume(yourFallbackMethod)
              ... //some other chained operations

当出现问题时,也可以使用 onErrorResume 方法设置回退方法。

但是如果你需要在这 30 秒内真正阻塞线程,你应该使用阻塞方法而不是超时。例子:
yourMonoOrFlux.block(Duration.ofSeconds(30))
              ... //other chained operations 

引用官方reactor documentation

关于java - 单声道/通量 : how to suspend thread and wait for event or timeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57413802/

相关文章:

java - 可序列化对象上的 InvalidClassException

Kotlin 对象,实现与实例

java - 当 ParallelFlux 发生错误时回滚所有更改

spring - 如何配置 reactor-netty 以使用 SSL?

java - MYSql 中的全文搜索

java - 尝试使Java中的音频失真

android - Jetpack 组成 : how to force a dropdownmenu to be anchored underneath its parent?

spring - 如何检查 Mono 是否为空?

spring-boot - 响应式(Reactive) Elasticsearch 和分页

java - 从数据库返回值时数字格式异常(JPA)