我正在尝试使 QueueChannel 的消息持久化,即使应用程序被终止,我也需要在应用程序再次启动后继续处理消息。 我知道使用由带有事务轮询器的 ServiceActivator 处理的 JdbcChannelMessageStore 支持的 QueueChannel 很容易完成,但是我必须使用 Redis 来完成这项任务。
鉴于此,我尝试了由 RedisChannelMessageStore 支持的 QueueChannel,该 RedisChannelMessageStore 由带有事务轮询器的 ServiceActivator 处理。它适用于队列中待处理的消息,但在 kill 时正在处理的消息丢失。
我想知道在这种情况下是否可以使用任何 spring 集成组件或模式。
我正在考虑手工完成的可能性。当消息进来时,我将其放入 Redis,当它完成处理时,我将其删除,然后在应用程序启动时,我从 Redis(如果有的话)读取消息到 channel 。但我对这种方法不太满意。
最佳答案
QueueChannel
端点的Poller
可以使用TransactionSynchronizationFactory
配置,其中DefaultTransactionSynchronizationFactory
实现可以配置为通过 ExpressionEvaluatingTransactionSynchronizationProcessor
将消息重新发送回队列:https://docs.spring.io/spring-integration/docs/5.0.3.RELEASE/reference/html/transactions.html#transaction-synchronization
关于spring - 使用 Redis 保证消息传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49502920/