阿里云-ONS-Help-产品介绍-消息类型:事务消息

ylbtech-阿里云-ONS-Help-产品介绍-消息类型:事务消息
1.返回顶部

1、

本页目录

本文介绍消息队列 RocketMQ 版事务消息的概念、适用场景、交互流程以及使用过程中的注意事项。

概念介绍

  • 事务消息:消息队列 RocketMQ 版提供类似 X/Open XA 的分布式事务功能,通过消息队列 RocketMQ 版事务消息能达到分布式事务的最终一致。
  • 半事务消息:暂不能投递的消息,发送方已经成功地将消息发送到了消息队列 RocketMQ 版服务端,但是服务端未收到生产者对该消息的二次确认,此时该消息被标记成“暂不能投递”状态,处于该种状态下的消息即半事务消息。
  • 消息回查:由于网络闪断、生产者应用重启等原因,导致某条事务消息的二次确认丢失,消息队列 RocketMQ 版服务端通过扫描发现某条消息长期处于“半事务消息”时,需要主动向消息生产者询问该消息的最终状态(Commit 或是 Rollback),该询问过程即消息回查。

适用场景

事务消息的适用场景示例:

通过购物车进行下单的流程中,用户入口在购物车系统,交易下单入口在交易系统,两个系统之间的数据需要保持最终一致,这时可以通过事务消息进行处理。交易系统下单之后,发送一条交易下单的消息到消息队列 RocketMQ 版,购物车系统订阅消息队列 RocketMQ 版的交易下单消息,做相应的业务处理,更新购物车数据。

交互流程

事务消息交互流程如下图所示。

事务消息发送步骤如下:

  1. 发送方将半事务消息发送至消息队列 RocketMQ 版服务端。
  2. 消息队列 RocketMQ 版服务端将消息持久化成功之后,向发送方返回 Ack 确认消息已经发送成功,此时消息为半事务消息。
  3. 发送方开始执行本地事务逻辑。
  4. 发送方根据本地事务执行结果向服务端提交二次确认(Commit 或是 Rollback),服务端收到 Commit 状态则将半事务消息标记为可投递,订阅方最终将收到该消息;服务端收到 Rollback 状态则删除半事务消息,订阅方将不会接受该消息。

事务消息回查步骤如下:

  1. 在断网或者是应用重启的特殊情况下,上述步骤 4 提交的二次确认最终未到达服务端,经过固定时间后服务端将对该消息发起消息回查。
  2. 发送方收到消息回查后,需要检查对应消息的本地事务执行的最终结果。
  3. 发送方根据检查得到的本地事务的最终状态再次提交二次确认,服务端仍按照步骤 4 对半事务消息进行操作。

注意事项

  1. 事务消息的 Group ID 不能与其他类型消息的 Group ID 共用。与其他类型的消息不同,事务消息有回查机制,回查时消息队列 RocketMQ 版服务端会根据 Group ID 去查询客户端。
  2. 通过 ONSFactory.createTransactionProducer 创建事务消息的 Producer 时必须指定 LocalTransactionChecker 的实现类,处理异常情况下事务消息的回查。
  3. 事务消息发送完成本地事务后,可在 execute 方法中返回以下三种状态:
    • TransactionStatus.CommitTransaction:提交事务,允许订阅方消费该消息。
    • TransactionStatus.RollbackTransaction:回滚事务,消息将被丢弃不允许消费。
    • TransactionStatus.Unknow:暂时无法判断状态,等待固定时间以后消息队列 RocketMQ 版服务端向发送方进行消息回查。
  4. 可通过以下方式给每条消息设定第一次消息回查的最快时间: 
    Message message = new Message();
    // 在消息属性中添加第一次消息回查的最快时间,单位秒。例如,以下设置实际第一次回查时间为 120 秒 ~ 125 秒之间
    message.putUserProperties(PropertyKeyConst.CheckImmunityTimeInSeconds,"120");
    // 以上方式只确定事务消息的第一次回查的最快时间,实际回查时间向后浮动 0 秒 ~ 5 秒;如第一次回查后事务仍未提交,后续每隔 5 秒回查一次   

更多信息

收发事务消息的示例代码如下:

2、

2.返回顶部
3.返回顶部
4.返回顶部
5.返回顶部

1、

https://help.aliyun.com/document_detail/43348.html

2、

6.返回顶部
作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/storebook/p/12594776.html

时间: 2024-11-05 23:23:54

阿里云-ONS-Help-产品介绍-消息类型:事务消息的相关文章

【结果很简单,过程很艰辛】记阿里云Ons消息队列服务填坑过程

Maybe 这个问题很简单,因为解决方法是非常简单,但填坑过程会把人逼疯,在阿里云ONS工作人员.同事和朋友的协助下,经过一天的调试和瞎捣鼓,终于解决了这个坑,把问题记下来,也许更多人在碰到类似问题的时候,会开放思路.当然不得不说,Ons的.NET接口还很不完善,甚至没有独立在Windos 2008/2012服务器测试过,希望官方加把力. 1.阿里云ONS介绍 ONS(Open Notification Service)即开放消息服务,是基于阿里开源消息中间件MetaQ(RocketMQ)打造的

阿里云ONS而微软Azure Service Bus体系结构和功能比较

阿里云ONS而微软Azure Service bus体系结构和功能比较 版权所有所有,转载请注明出处http://blog.csdn.net/yangzhenping.谢谢! 阿里云的开放消息服务: 一.如图所看到的,ProducerID1 的producer 实例有三个,可能是部署在三个机器上的三个进程,也可能是一台机 器上的三个进程. 每一个实例都会发送TopicA 的消息.同理,ProducerID2 与之类似. 二.ConsumerID1 有三个实例,假设是集群消费方式,那么每一个实例消

阿里云ONS和微软Azure Service Bus的架构和特性比较

阿里云ONS和微软Azure Service bus的架构和特性比较 版权所有,转载请注明出处http://blog.csdn.net/yangzhenping,谢谢! 阿里云的开放消息服务: 一.如图所示,ProducerID1 的producer 实例有三个,可能是部署在三个机器上的三个进程,也可能是一台机 器上的三个进程.每个实例都会发送TopicA 的消息.同理,ProducerID2 与之类似. 二.ConsumerID1 有三个实例,如果是集群消费方式,那么每个实例消费TopicA

阿里云ACE共创空间——MQ消息队列产品测试

一.产品背景消息队列是阿里巴巴集团自主研发的专业消息中间件. 产品基于高可用分布式集群技术,提供消息订阅和发布.消息轨迹查询.定时(延时)消息.资源统计.监控报警等一系列消息云服务,是企业级互联网架构的核心产品. MQ 目前提供 TCP .MQTT 两种协议层面的接入方式,支持 Java.C++ 以及 .NET 不同语言,方便不同编程语言开发的应用快速接入 MQ 消息云服务. 用户可以将应用部署在阿里云 ECS.企业自建云,或者嵌入到移动端.物联网设备中与 MQ 建立连接进行消息收发,同时本地开

阿里云-ONS-Help:消息队列 RocketMQ 版

ylbtech-阿里云-ONS-Help:消息队列 RocketMQ 版 1.返回顶部 1. 消息队列 RocketMQ 版 查看产品> 消息队列RocketMQ版是阿里云基于Apache RocketMQ构建的低延迟.高并发.高可用.高可靠的分布式消息中间件. 产品更新 常见问题 立即购买 学习路径 由浅入深,带您玩转消息队列RocketMQ版! 了解 消息队列RocketMQ版简介 产品简介 名词解释 适用场景 产品架构 产品定价 计费概述 资源包说明 欠费说明 成本对比 上手 快速入门 主

web 直播&即时聊天------阿里云、融云

随着直播越来越火,所在公司也打算制作自己的直播,所以去了解了这方面,使用后发现还是有些问题需要记录的. 经过分析,制作直播应该是分为两块来做,即直播与实时评论.这里先去制作实时评论,等直播ok后,也会将相应心得写上来. 我们直播采用了阿里云,评论采用了融云. 其实融云的api还是比较清晰的,只不过web demo只有ng的,个人对ng不是很熟悉,所以只能自己慢慢摸索. 1. 注册帐号,根据提示创建应用,获取appkey 2. 引入sdk(请去官网选择最新版本) <script src="h

手机秒变IoT设备?——巧妙利用阿里云物联网平台

作者序 什么?嵌入五行代码可以实现用户定位,用户在线数量统计,还能和云端消息交互! 没错得益于阿里云物联网套件创建设备免费,消息收费也只有百万消息三块六(先使用后付费,不满不要钱),尤其对于学生党来说,基本是用不了这么多,也就意味着免费!(学生党福音[手动滑稽]) Talk is cheap,show me the code public static void main(String[] args) { //去阿里云官网上创建一个产品,设置好地理位置属性.可以变相用做分组 String pro

阿里云企业IPv6部署方案

摘要: 一.什么是IPv6. IP version 6 (IPv6)是IP协议(Internet Protocol)的最新版本,设计作为IP version 4 (IPv4) [RFC791]的继任版本. 一.什么是IPv6. IP version 6 (IPv6)是IP协议(Internet Protocol)的最新版本,设计作为IP version 4 (IPv4) [RFC791]的继任版本.从IPv4到IPv6的改变主要有以下几点: 1)      扩展的地址容量: 2)      简化

Apache RocketMQ 正式开源分布式事务消息

近日,Apache RocketMQ 社区正式发布4.3版本.此次发布不仅包括提升性能,减少内存使用等原有特性增强,还修复了部分社区提出的若干问题,更重要的是该版本开源了社区最为关心的分布式事务消息,而且实现了对外部组件的零依赖.接下来,本文将详细探秘RocketMQ事务消息的设计原理以及实现机制. 一.需求缘起 在微服务架构中,随着服务的逐步拆分,数据库私有已经成为共识,这也导致所面临的分布式事务问题成为微服务落地过程中一个非常难以逾越的障碍,但是目前尚没有一个完整通用的解决方案. 其实不仅仅