【问题标题】:reactor-core crash and restart state反应堆核心崩溃和重启状态
【发布时间】: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


【解决方案1】:

Reactor 是一个库,旨在处理 JVM 边界内的实时事件,无论是在处理数据的位置还是生命周期方面。持久化状态(到磁盘或任何地方)或从 JVM 崩溃中恢复超出了库的范围。

【讨论】:

  • 感谢您的回答。有道理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多