分布式事务的解决方案之一事务消息

DBC 1.6K 0

简介:讲解分布式事务的解决方案之一事务消息

  • 事务消息
    • 消息队列提供类似Open XA的分布式事务功能,通过消息队列事务消息能达到分布式事务的最终一致

       

  • 半事务消息
    • 暂不能投递的消息,发送方已经成功地将消息发送到了消息队列服务端,但是服务端未收到生产者对该消息的二次确认,此时该消息被标记成“暂不能投递”状态,处于该种状态下的消息即半事务消息。
  • 消息回查
    • 由于网络闪断、生产者应用重启等原因,导致某条事务消息的二次确认丢失,消息队列服务端通过扫描发现某条消息长期处于“半事务消息”时,需要主动向消息生产者询问该消息的最终状态(Commit或是Rollback),该询问过程即消息回查
  • 交互图(来源rocketmq官方文档)
  • 分布式事务的解决方案之一事务消息插图

  • 目前较为主流的MQ,比如ActiveMQ、RabbitMQ、Kafka、RocketMQ等,只有RocketMQ支持事务消息
    • 如果其他队列需要事务消息,可以开发个消息服务,自行实现半消息和回查功能
  • 好处
    • 事务消息不仅可以实现应用之间的解耦,又能保证数据的最终一致性
    • 同时将传统的大事务可以被拆分为小事务,能提升效率
    • 不会因为某一个关联应用的不可用导致整体回滚,从而最大限度保证核心系统的可用性
  • 缺点
    • 不能实时保证数据一致性
    • 极端情况下需要人工补偿,比如 假如生产者成功处理本地业务,消费者始终消费不成功

发表评论 取消回复
表情 图片 链接 代码

分享