Spring Integration - 在处理消息之前等待条件

时间:2016-05-24 13:00:27

标签: spring-integration

我需要实现一个spring集成流程,其中某些消息只能在某个条件成立时才被处理,即这些消息需要等待。但是,我不想阻止流动。有没有这样做的组件?

2 个答案:

答案 0 :(得分:0)

您可以在QueueChannel上启动/停止轮询使用者 - 当轮询器停止时,消息将在通道中累积,然后在消费者启动时消耗。

您可以通过bean名称获取对使用者的引用并启动/停止它,也可以使用控制总线并向其发送消息"foo.start()"

默认情况下,消息将保存在内存中。如果需要持久性,可以添加消息存储库或使用由JMS,RabbitMQ等支持的通道。

答案 1 :(得分:0)

如果实例发生故障,并非没有丢失数据的风险,因为数据将保留在内存中(您可以尝试暂时存储它并在VM崩溃的情况下重新注入它)。

Spring实现了一个名为 Aggregator 的集成模式,可用于此目的(链接到patternspring docs

你需要实现一个CorrelationStrategy来告诉spring不同的消息是如何相互关联的,ReleaseStrategy可以告诉spring所有需要的项目何时到达,因此,他们可以继续。

我将再次重复这一点,所有正在进行的数据都保存在内存中,因此您必须弄清楚如何在关机/崩溃后存储和重新注入数据。