使用Redis保证消息传递

时间:2018-03-27 01:08:54

标签: spring redis spring-integration

我试图使QueueChannel的消息持久化,即使应用程序被杀死,我还需要在应用程序再次启动后继续处理消息。 我知道使用由事务轮询器的ServiceActivator处理的JdbcChannelMessageStore支持的QueueChannel很容易完成,但我必须使用Redis执行此任务

鉴于此,我尝试使用由事务轮询器的ServiceActivator处理的RedisChannelMessageStore支持QueueChannel。它适用于要处理的队列中的消息,但是在kill时正在处理的消息将丢失。

我想知道在这种情况下是否有可用的弹簧集成组件或模式。

我考虑过手工做的可能性。当消息进入时,我进入Redis,当它完成处理后我将其删除,并且在应用程序的启动时,我读取了Redis(如果有的话)到该频道的消息。但是我对这种做法并不满意。

1 个答案:

答案 0 :(得分:0)

可以使用Poller配置QueueChannel端点的TransactionSynchronizationFactory,其中DefaultTransactionSynchronizationFactory实现可以配置为通过重新发送消息返回队列ExpressionEvaluatingTransactionSynchronizationProcessorhttps://docs.spring.io/spring-integration/docs/5.0.3.RELEASE/reference/html/transactions.html#transaction-synchronization