我们正在调查Camel用于新系统;我们的一种情况是启动了一组步骤,并且该组中的某些步骤可能需要数小时或数天才能执行。在完成这些长时间步骤之后,我们需要执行其他步骤。
我们还需要让系统在重新启动时继续运行,而这些步骤的一些“路线”正在进行中,即系统可能会重新启动,我们需要正在进行的“路线”保持其状态并选择他们离开的地方。
我知道我们可以使用排队的消息传递系统(如JMS),并且可以处理保存到此类队列中的消息。我不清楚的是如何(或是否)适合Camel - 我们是否需要将每个队列之后的步骤视为自己的路由,以便在启动时可以从队列中读取?这将把我们的处理步骤分成更多的“路线”而不是其他方式,但也许这就是它的完成方式。
是否存在帮助这种系统的Camel构造/构造?如果我知道他们的术语和基本大纲,我可能会想出来,但我真正需要的是解释构造的作用。
答案 0 :(得分:3)
Camel不是人类工作流程/持久任务系统。对于那种BPMS系统。 Camel更适合实时/近实时集成。
对于长期任务,您将其状态保存在某个外部系统(如消息代理或数据库或BPMS)中,然后您可以使用Camel路由处理并从一个状态移动到下一个状态 - 或者Camel适合的状态,例如集成您可以使用200多个Camel组件进行OOTB的许多不同系统。
Camel确实提供正常关机,因此您可以安全地关闭或重启Camel。但是在不太可能发生崩溃的情况下,如果您正在谈论幸免于系统崩溃,您可能希望查看事务和幂等性。
答案 1 :(得分:0)
您指的是路由中消息的异步处理。 Camel有几个组件可用于实现此目的。
SEDA / JVM可以用作JMS组件的低开销替换,在某些情况下我会专门使用它们。在您的情况下,持久性元素是必需的,因此SEDA / JVM不是一个选项,但为了简单起见,示例将使用SEDA,因为您可以快速启动并运行一些基础知识。
该示例将假设以下我们有一个启动计时器,然后需要运行两个进程。见下面的截图:
在此路由中,消息流在计时器和两个进程bean之间是同步的。
如果我们想要使这些步骤异步,我们需要将每个步骤分解为自己的路径。然后,我们将使用开头列出的组件之一连接这些路由。请参见下面的屏幕截图:
注意我们有三条路线,每条路线只有一条"处理"介入其中。 Route Test只有一个计时器,它会向称为processOne的SEDA队列发送一条消息。此消息在SEDA队列上接收并发送到Process_One bean。在此之后,它被发送到名为processTwo的SEDA队列,在那里它被接收并传递给Process_Two bean。所有这些都是异步完成的。
一旦理解了概念,就可以用JMS替换SEDA组件。我怀疑状态跟踪将是最复杂的部分,因为Camel使异步部分变得容易。