2013-03-26 124 views
1

我目前正在开发一个骆驼集成应用程序,其中从以前的处理状态恢复很重要。例如,当停电时,重新处理所有以前处理的消息是非常重要的。处理过程应从停机之前停止的地方恢复。停电后恢复骆驼处理

我已经通过了一些可能的解决方案,包括秦始皇和Apache Shiro不见了。我不确定如何使用作为与Apache Camel集成的文档很少。然而,我还没有解决这两个问题。

我正在寻找在我可以使用潜在替代品或指向一些教程建议,让我开始。

回答

2

尚存停电的困难主要在于国家,以及如何在飞行中消息。

通常情况下,当你的路线内通话状态的方法是将其刷新到磁盘,或集群中的其他节点。以聚合模式为例,聚合状态将保存在聚合存储库中。默认的实现是在内存中,所以如果电源熄灭,所有的状态都会丢失。但是,还有其他的实现,包括一个用于JDBC的实现,以及另一个实现,使用Hazelcast(一种轻量级的内存数据网格)。我自己并没有使用Hazelcast,但是JDBC会对磁盘进行同步写入。聚合器模式可让您从停止的位置恢复。类似的解决方案存在幂等消费。

第二个问题,各地正在进行的消息是稍微复杂一点,并在很大程度上取决于你在哪里消费。如果您处于处理Web服务请求的过程中,并且电源熄灭,如果您丢失了该信息,那么这一点很重要吗?用户可以简单地重试。对外部系统的任何影响都可以封装在一个事务中,或者是一个具有JDBC幂等存储库的幂等消费者。

如果你正在构建基于消息的集成,你应该在一个事务中消耗,因此,如果您的服务器出现故障,这些消息再度进入经纪人和可以重播到另一个消费者。

使用seda:threads块时要小心,这些块使用内存中的队列来传递线程之间的交换,如果有人绊倒电源线,任何沿这些类型的路由传递的消息都将丢失。如果您无法承受消息丢失,并且需要这种类型的处理模型,请考虑使用JMS队列作为两条路线之间的端点(使用事务处理以确保您从中断点继续)。

+0

这是非常有用的建议,@Jake。我会根据你的建议做更多的研究。 – okello 2013-03-27 04:49:48