我正在为基于 Camel 的小型流程引擎开发 PoC。要求具有执行一系列后果步骤的能力,并且每个步骤都可能需要数小时才能执行。在这种情况下,异步通信风格是显而易见的选择,但我很难让“流程”部分正确。
向外部系统发送消息时,我需要等待完成。只要可能需要很多时间,我就会考虑在发送消息后停止处理具体步骤,然后在收到完成消息后开始新的“工作”。因此,从字面上看,每个步骤的处理将作为从同一 JMS 队列开始的 Camel 路由处理,然后基于内容的路由器将根据消息头或其内容决定应执行哪些具体逻辑。
然而,问题在于如何避免消息丢失的可能性。例如,在具体步骤中,我正在发送消息并停止处理。由于某种原因,外部系统没有处理消息,因此我的系统没有收到任何通知。这意味着进程被卡住,除非其他一些组件会生成消息来唤醒它。
此外,只要系统可以在任何时候关闭,我就必须构建逻辑以在重启后继续处理消息(这意味着某种消息持久性、重新传递和事务管理策略)。
所有这些问题加起来,因此我想请有经验的骆驼冠军提供有关如何使用骆驼设计这种逻辑的建议。我知道专用的 BPM 产品或 ESB 可能更容易处理这个问题,但我不想让解决方案变得臃肿。
欢迎任何建议,特别是在有助于简化解决方案的 Camel 功能方面。