什么是“长跑路线”的Camel构造?

时间:2017-09-22 02:30:38

标签: apache-camel

我们正在调查Camel用于新系统;我们的一种情况是启动了一组步骤,并且该组中的某些步骤可能需要数小时或数天才能执行。在完成这些长时间步骤之后,我们需要执行其他步骤。

我们还需要让系统在重新启动时继续运行,而这些步骤的一些“路线”正在进行中,即系统可能会重新启动,我们需要正在进行的“路线”保持其状态并选择他们离开的地方。

我知道我们可以使用排队的消息传递系统(如JMS),并且可以处理保存到此类队列中的消息。我不清楚的是如何(或是否)适合Camel - 我们是否需要将每个队列之后的步骤视为自己的路由,以便在启动时可以从队列中读取?这将把我们的处理步骤分成更多的“路线”而不是其他方式,但也许这就是它的完成方式。

是否存在帮助这种系统的Camel构造/构造?如果我知道他们的术语和基本大纲,我可能会想出来,但我真正需要的是解释构造的作用。

2 个答案:

答案 0 :(得分:3)

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

对于长期任务,您将其状态保存在某个外部系统(如消息代理或数据库或BPMS)中,然后您可以使用Camel路由处理并从一个状态移动到下一个状态 - 或者Camel适合的状态,例如集成您可以使用200多个Camel组件进行OOTB的许多不同系统。

Camel确实提供正常关机,因此您可以安全地关闭或重启Camel。但是在不太可能发生崩溃的情况下,如果您正在谈论幸免于系统崩溃,您可能希望查看事务和幂等性。

答案 1 :(得分:0)

您指的是路由中消息的异步处理。 Camel有几个组件可用于实现此目的。

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

SEDA / JVM可以用作JMS组件的低开销替换,在某些情况下我会专门使用它们。在您的情况下,持久性元素是必需的,因此SEDA / JVM不是一个选项,但为了简单起见,示例将使用SEDA,因为您可以快速启动并运行一些基础知识。

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

enter image description here

在此路由中,消息流在计时器和两个进程bean之间是同步的。

如果我们想要使这些步骤异步,我们需要将每个步骤分解为自己的路径。然后,我们将使用开头列出的组件之一连接这些路由。请参见下面的屏幕截图:

enter image description here

注意我们有三条路线,每条路线只有一条"处理"介入其中。 Route Test只有一个计时器,它会向称为processOne的SEDA队列发送一条消息。此消息在SEDA队列上接收并发送到Process_One bean。在此之后,它被发送到名为processTwo的SEDA队列,在那里它被接收并传递给Process_Two bean。所有这些都是异步完成的。

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