用骆驼处理长寿命的方法

问题描述

| 我正在研究基于Camel的小型流程引擎的PoC。需求必须具有执行一系列后果步骤的能力,并且每个步骤都可能需要数小时才能执行。在这种情况下,异步通信风格是很明显的选择,但是我很难正确地处理“过程”部分。 向外部系统发送消息时,我需要等待完成。只要可能要花费很多时间,我就在考虑在发送消息后停止对具体步骤的处理,然后在收到完成消息后开始新的“作业”。因此,从字面上讲,每个步骤的处理都将从在同一JMS队列处开始的Camel路由处理,然后基于内容的路由器将根据消息的标头或其内容决定执行哪个具体逻辑。 但是,问题在于如何避免潜在的消息丢失。例如,在具体步骤中,我正在发送消息并停止处理。外部系统由于某种原因未处理消息,因此我的系统未收到任何通知。这意味着除非其他组件将生成消息将其唤醒,否则进程将被卡住。 另外,只要可以在任何时间关闭系统,我都必须构建逻辑以在重新启动后继续处理消息(这意味着某种消息持久性,重新交付和事务管理策略)。 所有这些问题加在一起,因此我想请经验丰富的Camel拥护者就如何使用Camel设计这种逻辑提供建议。我知道专用的BPM产品或ESB可能会更轻松地解决此问题,但我不想夸大解决方案。 我们欢迎任何建议,尤其是在骆驼功能方面,可以帮助简化解决方案。     

解决方法

        骆驼的BAM支持应该为您提供一些长期的过程支持(超时,错误处理方案等)。此外,JMS和事务将有助于满足可靠/持久的消息传递需求等。 祝您好运,如果您采用其他方法,请告诉我们...     ,        我建议使用Claim Check模式最适合长时间运行的外部调用之间的持久状态。发送出站消息之前,请先检查进程的状态。 处理来自外部进程的不答复的一种方法是发布两条消息。一条消息发送给外部进程,另一条消息发送给内部队列。我将第二个称为进程超时消息。这是一条很小的消息,仅包含相关ID和适当的到期时间。如果从外部进程接收到该进程,则接收进程将具有相关性ID,并且能够从进程超时队列中删除消息。如果外部进程未回复,则进程超时队列的死信队列应连接到骆驼路由,以警告管理员或采取适当的自动措施,例如检索索赔检查等。这应该允许具有最小开销的持久状态,没有BPM工具,因此没有单点故障。