开发者社区 > 云原生 > 正文

4.5.2版本 事务消息设置延迟时间后导致RMQ_SYS_TRANS_HALF_TOPIC爆掉的问题

官网虽有说明,事务消息不支持延迟发送,但我还是试了一下,发现目标Consumer不但不能正确收到生产者发的消息,而且在Console查看RMQ_SYS_TRANS_HALF_TOPIC消息是瞬间占满(最多显示2000条),已经翻阅源码,造成此问题的基本原因如下:

1、设置DelayTimeLevel后,Broker端在调用EndTransactionProcessor时,目标Topic变成SCHEDULE_TOPIC_XXXX,REAL_TOPIC变成RMQ_SYS_TRANS_HALF_TOPIC,原有的真实Topic丢失。

2、延迟时间到了之后,会往RMQ_SYS_TRANS_HALF_TOPIC发一条消息,但RMQ_SYS_TRANS_OP_HALF_TOPIC队列里无此消息。

3、回查事务定时任务启动后,发现只在RMQ_SYS_TRANS_HALF_TOPIC有消息,触发该消息的回查事务方法,事务结束后,结果又往SCHEDULE_TOPIC_XXXX塞了一条消息。

4、如此反复直至15次尝试用尽,最终丢弃此消息。

个人认为有两个问题:

1、耗费资源,每条消息尝试15次,调用15次事务回查,代价有点大。

2、下游消费者一直收到不消息。

以上是个人看法,如有不正确或未详尽之处请回复,谢谢

原提问者GitHub用户TonyStark888

展开
收起
芬奇福贵 2023-05-26 15:48:29 118 0
1 条回答
写回答
取消 提交回答
  • 非常好的想法,首先,事务消息依赖于本地事务的执行时间,因此支持延迟的话,必须要考虑这两方面的因素,哪个因素比较重要也是值得商榷的。

    原回答者GitHub用户duhenglucky

    2023-05-26 17:51:49
    赞同 展开评论 打赏
问答地址:

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

热门讨论

热门文章

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载