spring - 使用 Redis 保证消息传递

标签 spring redis spring-integration

我正在尝试使 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/

相关文章:

java - Spring Boot 文件上传 - 连接由对等错误重置

java - JPA EntityManager 大内存问题

java - JPA 中 @ManytoOne 中的复合主键与链接类

python - 响应错误 : operation not permitted

hibernate - 为特定查询禁用 Hibernate 二级缓存读取或更新

java - 使用 Spring Integration JAR 时 Spring Batch 不退出

Spring 框架默认延迟初始化所有 bean

node.js - req.session undefined with Redis/Express

java - Spring Integration 是否有对 FTP 的代理支持?

spring retry 找到最后一次重试