【发布时间】:2018-04-13 15:01:02
【问题描述】:
我是 reactor-core 的新手,过去使用过 Erlang。
希望是一个快速的问题。
假设我们发送了一条消息“A”,然后期望在 x 分钟内得到回复。如果 x 分钟内没有响应,我们会运行一个备用例程。
可以使用 Flux 或 Mono 和方法 timeout(duration, fallback) 来完成
Here is the API from the rector-core site
public final Mono<T> timeout(Duration timeout,
Mono<? extends T> fallback)
Switch to a fallback Mono in case no item arrives within the given Duration.
If the fallback Mono is null, signal a TimeoutException instead.
Parameters:
timeout - the timeout before the onNext signal from this Mono
fallback - the fallback Mono to subscribe to when a timeout occurs
Returns:
a Mono that will fallback to a different Mono in case of timeout
如果 JVM 崩溃并重新启动会发生什么?
假设崩溃和重启需要 y 分钟。(假设 y 小于 x)
reactor-core 是否知道发生了崩溃? 知道现在需要等待 (x-y) 分钟,是否可以重新开始处理流程?
我知道 Camunda 将状态存储在 RDBMS 中。因此,它可能应该从崩溃中恢复。
【问题讨论】:
-
camunda 与您的反应堆问题有何关系。
-
@JanGalinski Camunda 看起来像一个框架,可以执行基于流的超时,并且可以将状态和数据存储在 RDBMS 中,因此必须能够从故障中恢复。
-
Camunda 是一个流程引擎……因此,您可以对代表您计划的操作的流程进行建模并运行它。 “内部”是一个保持状态的经典关系/事务数据模型。保持状态允许重新启动并继续......但是用例是什么?您如何尝试在反应式流处理和关系流程引擎之间做出决定?
-
@JanGalinski 感谢您的回答,我明白我正在寻找不同的东西。我的用例是使用来自发送者的单个消息,将相同的单个消息发送给一个接收者。接收方应在一段时间后(以分钟为单位)发送响应。如果没有响应,则会触发备用流程。现在知道这可能是每秒 25000 到 50000 条消息,而且如果任何处理节点出现故障,那么处理必须从它停止的地方开始,特别是对于超时。
标签: project-reactor camunda reactor reactive-streams