rocketmq 怎么实现事务消息

7 天前
 ljzxloaf
之前一直用的 qmq ,自带本地消息表,事务消息会与本地消息一起提交,对业务基本零侵入。


看了下 rocketmq 的事务消息示例

发送消息

https://github.com/apache/rocketmq-spring/blob/1be808da74764128e404ae33cbf5e97c248aa207/rocketmq-spring-boot-samples/rocketmq-produce-demo/src/main/java/org/apache/rocketmq/samples/springboot/ProducerApplication.java#L209

本地事务、checkState

https://github.com/apache/rocketmq-spring/blob/1be808da74764128e404ae33cbf5e97c248aa207/rocketmq-spring-boot-samples/rocketmq-produce-demo/src/main/java/org/apache/rocketmq/samples/springboot/ProducerApplication.java#L246

这也太别扭了吧,分割业务逻辑不说,也要多写很多代码,甚至还要改造业务表。

不知道是不是我使用的姿势不对,rmq 有点盛名之下其实难副的感觉?
1539 次点击
所在节点    程序员
9 条回复
EMMMMMMMMM
7 天前
你是去哪儿的?
mark2025
7 天前
如果数据库是 pgsql 可以考虑 pgmq ( https://tembo-io.github.io/pgmq/) ,这是 pg 的一个插件,用 pg 来实现的轻量级消息队列。
业务操作和队列消息可以共用事务,确保业务操作与消息的一致性。
jorneyr
7 天前
RocketMQ 的分布式事务需要写代码判断事务是否提交,事务里的每个业务操作是否完成都需要调用方向 RocketMQ 确认的。
securityCoding
7 天前
没理解为啥别扭,异构系统你要的事务不就是业务本身?
1ffree
6 天前
怎么理解 本地消息表 && 对业务基本零侵入? 请教下咋实现的
ljzxloaf
6 天前
nanwangnongfu
6 天前
会记录个发送消息的记录状态表,发送失败定期重试。
xiaofan2
6 天前
我理解这就是两种不同模式的事务消息的实现罢了 你使用的是本地事务消息表模式(其他 MQ 也可以复用这种模式) RocketMQ 自带的是半消息模式 半消息模式确实对开发来说繁琐一点 毕竟要开发回查逻辑 但是性能比本地事务消息表高很多 毕竟本地事务消息表至少要多一条 SQL
ljzxloaf
5 天前
@xiaofan2 #8 不止繁琐一点啊
@nanwangnongfu #7 啊?不用 rmq 自带的吗?

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

https://tanronggui.xyz/t/1109287

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

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

© 2021 V2EX