我需要实现一个spring集成流程,其中某些消息只能在某个条件成立时才被处理,即这些消息需要等待。但是,我不想阻止流动。有没有这样做的组件?
答案 0 :(得分:0)
您可以在QueueChannel
上启动/停止轮询使用者 - 当轮询器停止时,消息将在通道中累积,然后在消费者启动时消耗。
您可以通过bean名称获取对使用者的引用并启动/停止它,也可以使用控制总线并向其发送消息"foo.start()"
。
默认情况下,消息将保存在内存中。如果需要持久性,可以添加消息存储库或使用由JMS,RabbitMQ等支持的通道。
答案 1 :(得分:0)
如果实例发生故障,并非没有丢失数据的风险,因为数据将保留在内存中(您可以尝试暂时存储它并在VM崩溃的情况下重新注入它)。
Spring实现了一个名为 Aggregator 的集成模式,可用于此目的(链接到pattern和spring docs)
你需要实现一个CorrelationStrategy
来告诉spring不同的消息是如何相互关联的,ReleaseStrategy
可以告诉spring所有需要的项目何时到达,因此,他们可以继续。
我将再次重复这一点,所有正在进行的数据都保存在内存中,因此您必须弄清楚如何在关机/崩溃后存储和重新注入数据。