Apache camel 电源故障后恢复Camel处理

Apache camel 电源故障后恢复Camel处理,apache-camel,shiro,terracotta,Apache Camel,Shiro,Terracotta,我目前正在开发一个Camel集成应用程序,其中从以前的处理状态恢复是很重要的。例如,当停电时,重要的是不要重新处理所有以前处理过的消息。处理应从停机前停止的位置恢复 我已经讨论了很多可能的解决方案,包括赤土和其他。我不确定如何使用它们,因为与ApacheCamel集成的文档很少。然而,这两件事我还没有决定 我正在寻找关于我可以使用的潜在替代方案的建议,或者一些教程的指针来帮助我开始学习 在中断中生存的困难主要在于状态,以及如何处理飞行中的消息 通常,当您谈论路由内的状态时,解决方案是将其刷新到磁

我目前正在开发一个Camel集成应用程序,其中从以前的处理状态恢复是很重要的。例如,当停电时,重要的是不要重新处理所有以前处理过的消息。处理应从停机前停止的位置恢复

我已经讨论了很多可能的解决方案,包括赤土和其他。我不确定如何使用它们,因为与ApacheCamel集成的文档很少。然而,这两件事我还没有决定


我正在寻找关于我可以使用的潜在替代方案的建议,或者一些教程的指针来帮助我开始学习

在中断中生存的困难主要在于状态,以及如何处理飞行中的消息

通常,当您谈论路由内的状态时,解决方案是将其刷新到磁盘或集群中的其他节点。以聚合器模式为例,聚合状态持久化在聚合存储库中。默认实现在内存中,因此,如果断电,所有状态都将丢失。但是,还有其他实现,包括一个用于JDBC,另一个使用Hazelcast(一种轻量级内存数据网格)。我自己没有使用Hazelcast,但JDBC对磁盘进行同步写入。聚合器模式允许您从停止的位置继续。对于幂等消费也存在类似的解决方案

第二个问题,关于飞行中的信息有点复杂,主要取决于你从哪里消费。如果你正在处理一个Web服务请求,并且电源耗尽,那么如果你丢失了消息,那有关系吗?用户只需重试即可。对外部系统的任何影响都可以包装在事务中,或者使用JDBC幂等存储库包装在幂等消费者中

如果您正在构建基于消息传递的集成,那么您应该在事务中使用,这样,如果您的服务器停机,消息将返回到代理中,并可以重播到另一个使用者


使用
seda:
threads
块时要小心,这些块使用内存中的队列来传递线程之间的交换,如果有人通过电源线绊倒,沿着这些路由的任何消息都将丢失。如果你负担不起消息丢失,并且需要这种处理模型,考虑使用JMS队列作为两条路线之间的端点(用事务来确保你在你离开的地方捡起)。这是非常有用的建议。我会根据你的建议做更多的研究。