2017-09-22 102 views
0

我们正在研究骆驼用于新系统;我们的一种情况是启动了一系列步骤,并且集合中的某些步骤可能需要几小时或几天才能执行。我们需要在长时间完成这些步骤后执行其他步骤。“长跑路线”的骆驼构造是什么?

我们还需要让系统在重启过程中存活下来,而这些步骤中的某些“路由”正在进行中,即系统可能会重新启动,并且我们需要正在进行的“路由”保持其状态并且拿起他们离开的地方。

我知道我们可以使用排队消息传递系统,比如JMS,并且放入这样一个队列的消息可以被处理为持久的。我不清楚骆驼是如何(或是否)) - 我们是否需要将每个队列之后的步骤作为自己的路线处理,以便在启动时从队列中读取?这将把我们的处理步骤分解成比我们更多的“路线”,但也许这就是它的完成方式。

是/有骆驼构建/辅助这种系统的构造?如果我知道他们的术语和基本轮廓,我可能会想出来,但我真正需要的是对结构做什么的解释。

回答

0

您指的是路由中消息的异步处理。骆驼有几个组件可以用来实现这一点。

  • SEDA:在内存中不持久,只能调用相同路由中的端点。
  • VM:内存不持久,可以调用不同骆驼上下文中的端点,但限于同一个JVM。该组件是SEDA的扩展。
  • JMS:持久性可以在队列堆栈上配置。与SEDA/JVM相比,重量更重,但容错性更强。

SEDA/JVM可用作JMS组件的低开销替代品,并且在某些情况下,我会专门使用它们。在你的情况下,持久化元素是必需的,所以SEDA/JVM不是一种选择,但为了简单起见,示例将使用SEDA,因为你可以快速地获得一些基础知识并运行。

该示例将假设以下我们有一个计时器,它启动,然后有两个进程需要运行。参见下图:

enter image description here

在此路由消息流是计时器和两个过程之间豆同步。

如果我们想要使这些步骤异步,我们需要将每一步都分解成它自己的路线。然后,我们将使用开头列出的其中一个组件连接这些路线。见下图:

enter image description here

通知我们有三个路线,每条路线的路线只中有一个“处理”的步骤。路由测试只有一个定时器,它将消息发送到名为processOne的SEDA队列。该消息在SEDA队列中收到并发送给Process_One bean。在此之后,它被发送到称为processTwo的SEDA队列,在那里它被接收并传递给Process_Two bean。所有这些都是异步完成的。

一旦理解了概念,您就可以用JMS替换SEDA组件。我怀疑状态跟踪将成为最复杂的部分,因为Camel使异步部分变得简单。

2

骆驼不是一个人类工作流程/持久的任务系统。对于那种看看BPMS系统。骆驼更适合实时/近实时的集成。

对于长期任务,您可以在消息代理或数据库或BPMS等外部系统中持久保存其状态,然后可以使用骆驼路由处理并从一个状态转移到下一个状态 - 或骆驼适合的位置,如集成与许多不同的系统,你可以用200 +骆驼组件做OOTB。

骆驼提供优雅的关机,因此您可以安全地关闭或重新启动骆驼。但是,如果发生崩溃的可能性不大,如果您正在谈论幸存的系统崩溃,您可能需要查看交易和幂等性。