问个分布式事务的问题

357 天前
 7911364440

业务流程大概是这样,从 RocketMQ 消费消息,将收到的数据转发给多个数据源(可能是 MySQL 、Oracle 、Kafka 等)。
问题是如何保证一条消息最终成功发送给所有客户端?假设写 MySQL 成功了,发送 Kafka 时失败了,要怎么重发

目前想到的方案:

  1. 将发送失败的消息保存到本地数据库,同时记录目标客户端,再通过定时任务重发。
  2. 跟 1 类似,将失败的消息发送到消息队列中的某个特定的 topic ,客户端消费这个 topic 实现重发。
1806 次点击
所在节点    程序员
23 条回复
documentzhangx66
356 天前
最省事的办法,是反向操作。

需要全局一致性的数据,全部放在关系型数据库里处理,此数据库用于全局专门处理这类数据。这种设计设计,性能、备份、HA 都很好做。
xiaohundun
356 天前
是不是可以参考 seata 的 TCC 模式?
candafromcn
356 天前
RocketMQ 不能像 kafka 一样分组消费吗,每一个需要同步的数据源认为是一个消费者,保证每个消费者 at least once 的消费就行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/942575

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX