当前位置: 首页 > 知识库问答 >
问题:

使用Redis保证消息传递

梅跃
2023-03-14

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

有鉴于此,我尝试了由ServiceActivator和事务轮询器处理的RedisChannelMessageStore支持的QueueChannel。对于要处理的队列中的消息,它工作得很好,但在终止时正在处理的消息会丢失。

我想知道是否有任何spring集成组件或模式可以在这种情况下使用。

我正在考虑手工做这件事的可能性。当消息传入时,我将其放入Redis,当它完成处理后,我将其删除,在应用程序启动时,我将消息从Redis(如果有)读取到通道。但我对这种方法感到不舒服。

共有1个答案

毛峻
2023-03-14

该队列通道的endpoint的轮询器可以配置为事务同步工厂(TransactionSynchronizationFactory),其中可以配置默认事务同步工厂(DefaultTransactionSynchronizationFactory)实现,以通过表达式评估事务同步处理器(ExpressionEvaluationTransactionSynchronizationProcessor)将消息重新发送回队列:https://docs.spring.io/spring-integration/docs/5.0.3.RELEASE/reference/html/transactions.html#transaction-同步化

 类似资料:
  • Storm 通过 Trident 对保证消息处理提供了不同的 level ,包括 best effort(尽力而为),at least once (至少一次)和exactly once(至少一次). 这张页面描述如何保证至少处理一次. What does it mean for a message to be "fully processed"?(一条信息被完全处理是什么意思) 一个 tuple

  • 我遇到了两个关于订购的短语, 生产者发送到特定主题分区的消息将按发送顺序追加。也就是说,如果记录M1与记录M2由同一生产者发送,并且M1首先发送,则M1的偏移量将低于M2并出现在日志中的较早位置。 另一个 问题是,如果存在如#2所述的失败发送,那么该顺序是否仍会保留到特定分区?如果一条消息存在潜在问题,将删除每个分区的所有以下消息“以保留顺序”,或者将发送“正确”的消息,并将失败的消息通知应用程序

  • 面试题 如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性? 面试官心理分析 其实这是很常见的一个问题,这俩问题基本可以连起来问。既然是消费消息,那肯定要考虑会不会重复消费?能不能避免重复消费?或者重复消费了也别造成系统异常可以吗?这个是 MQ 领域的基本问题,其实本质上还是问你使用消息队列如何保证幂等性,这个是你架构里要考虑的一个问题。 面试题剖析 回答这个问题,首先你别听到重复消息这个

  • 由于内容脚本在网页而不是扩展程序的上下文中运行,因此它们通常需要某种与扩展程序其余部分进行通信的方式。例如,RSS 阅读器扩展程序可以使用内容脚本来检测页面上 RSS 摘要的存在,然后通知后台页面以显示该页面的操作图标。 扩展及其内容脚本之间的通信使用消息传递来实现。任何一方都可以监听从另一端发送的消息,并在同一通道上进行响应。消息可以包含任何有效的 JSON 对象(空,布尔值,数字,字符串,数组

  • ms tcp nodelay 描述: 在信差的 TCP 会话上禁用 nagle 算法。 类型: Boolean 是否必需: No 默认值: true ms initial backoff 描述: 出错时重连的初始等待时间。 类型: Double 是否必需: No 默认值: .2 ms max backoff 描述: 出错重连时等待的最大时间。 类型: Double 是否必需: No 默认值: 15

  • 消息传递 目录 一次简单的请求 h3Name 长时间保持连接 h3Name 扩展之间的消息传递 h3Name 安全策略 h3Name 范例 h3Name API reference Properties propertyName Methods methodName Events eventName Types id For information on how to use experiment