我有一个要求,我需要保存/缓冲在通道上接收到的消息,并根据消息数或超时表示1分钟内没有收到消息而在数据库中保持。有没有办法在春季集成中实现这一点
IntegrationFlows
.from(Jms.messageDrivenChannelAdapter(connectionFactory)
.destination(sourceQueue))
.transform(someTransform, "transform")
.handle(someService, "save")
.get();
有一个基于Aggregator
EI模式实现的.aggregate()
运算符。
您可以使用JdbcMessageStore
配置那个一个来缓冲消息并将它们存储到DB中。
您可以通过ReleaseStrategy
(根据收到的每条消息(将它们保存在那里,直到出现某种情况,或者通过group timeout
释放它们。
如果您不想在之后将它们全部作为单个聚合消息,可以考虑使用SimpleMessageGroupProcessor
,它只生成Collection<Message<?>>
并对它们进行迭代,以逐个发送到输出。
请参阅参考手册中有关聚合器的更多信息:https://docs.spring.io/spring-integration/reference/html/messaging-routing-chapter.html#aggregator