前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >本地消息表

本地消息表

原创
作者头像
Get
发布2024-03-25 22:30:37
1020
发布2024-03-25 22:30:37
代码语言:java
复制
本地消息表:核心思路是将分布式事务拆分成本地事务进行处理。
角色:
事务主动方
事务被动方
通过在事务主动发起方额外新建事务消息表,事务发起方处理业务和记录事务消息在本地事务中完成,轮询事务消息表的数据发送事务消息,
事务被动方基于消息中间件消费事务消息表中的事务。
这样可以避免以下两种情况导致的数据不一致性:
业务处理成功、事务消息发送失败
业务处理失败、事务消息发送成功

clipboard.png
clipboard.png
代码语言:java
复制
上图中整体的处理步骤如下:
1、事务主动方:在同一个本地事务中处理业务和写消息表操作
2、事务主动方:通过消息中间件,通知事务被动方处理事务通知事务待消息。
              消息中间件可以基于 Kafka、RocketMQ 消息队列,事务主动方主动写消息到消息队列,事务消费方消费并处理消息队列中的消息。
3、事务被动方:通过消息中间件,通知事务主动方事务已处理的消息。
4、事务主动方:接收中间件的消息,更新消息表的状态为已处理。
一些必要的容错处理如下:
1、当1处理出错,由于还在事务主动方的本地事务中,直接回滚即可
2、当2、3处理出错,由于事务主动方本地保存了消息,只需要轮询消息重新通过消息中间件发送,事务被动方重新读取消息处理业务即可。
3、如果是业务上处理失败,事务被动方可以发消息给事务主动方回滚事务
4、如果事务被动方已经消费了消息,事务主动方需要回滚事务的话,需要发消息通知事务主动方进行回滚事务。
优点:
1、从应用设计开发的角度实现了消息数据的可靠性,消息数据的可靠性不依赖于消息中间件,弱化了对 MQ 中间件特性的依赖。
2、方案轻量,容易实现。
缺点:
1、与具体的业务场景绑定,耦合性强,不可公用。
2、消息数据与业务数据同库,占用业务系统资源。
3、业务系统在使用关系型数据库的情况下,消息服务性能会受到关系型数据库并发性能的局限。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档