如果本地事务成功,生产者会通知 RocketMQ 提交消息,RocketMQ 将半消息转换为正常消息,并发送给消费者。 如果本地事务失败,生产者会通知 RocketMQ回滚消息,RocketMQ 会删除该半消息。 事务状态回查:如果 RocketMQ 没有收到生产者的事务状态确认,RocketMQ 会通过回查机制询问生产者事务的最终状态,确保消息的一致性。
RocketMQ采用两阶段提交的方式实现事务消息。 1.1 RocketMQ事务消息的原理 半事务消息发送:生产者将半事务消息发送至RocketMQ服务端。 消息持久化及返回Ack确认:RocketMQ服务端接收到半事务消息并持久化成功后,向生产者返回Ack确认消息已经发送成功。此时消息状态为半事务消息。 执行本地事务逻辑:根据发送结果执行本地事...
RocketMQ 提供了事务消息,通过事务消息就能达到分布式事务的最终一致性。 上图是 RocketMQ 提供的事务消息工作流程图,这是一种非常典型的分布式事务的解决方案。 半事务消息(half message) 指暂不能投递的消息,发送方已经成功地将消息发送到 RocketMQ 服务端,但是MQ未收到生产者对该消息的二次确认,此时该消息被标...
RocketMQ实现事务消息主要分为两个阶段:正常事务的发送及提交、事务信息的补偿流程 整体流程为: 正常事务发送与提交阶段 1、生产者发送一个半消息给MQServer(半消息是指消费者暂时不能消费的消息)2、服务端响应消息写入结果,半消息发送成功3、开始执行本地事务4、根据本地事务的执行状态执行Commit或者Rollback操作 事...
简介: 【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息 本文将主要介绍在SpringBoot项目中如何集成RocketMQ以实现普通消息和事务消息的。 首先是分别创建生产者的springboot项目 springboot-rocketmq-producer,创建消费者的springboot项目 springboot-rocketmq-consumer。 1. 引入依赖 本例中使用的...
首先我们用原生代码来实现一下事务消息,下面是事务消息生产者TransactionProducer类的代码,具体代码解释已经用注释标明。 package com.huc.rocketmq.transaction; import org.apache.rocketmq.client.exception.MQClientException; import org.apache.rocketmq.client.producer.TransactionListener; ...
使用Spring Boot项目后,我们还是先准备一个消息的实体类TranMessage,代码如下: packagecom.huc.rocketmq.transaction.spring;/** * 事务消息实体 */publicclassTranMessage{publicstaticfinalString TOPIC ="Tran";/** * 编号 */privateInteger id;publicTranMessage setId(Integer id) {this.id = id;returnthis;...
一、事务消息的实现步骤 事务消息发送步骤: 发送方将半事务消息发送至RocketMQ服务端。 RocketMQ服务端将消息持久化之后,向发送方返回Ack确认消息已经发送成功。由于消息为半事务消息,在未收到生产者对该消息的二次确认前,此消息被标记成“暂不能投递”状态。
环境jdk: 8u22rocketmq: rocketmq-all-4.5.2-bin-releasespringboot: 2.1.6.RELEASErocketmq-springboot: 2.0.3 发送流程(事务消息) Rocket发送事务消息: R
事务消息:支持分布式事务,适合保证消息一致性。 springboot集成rocketmq的语法: 同步发送: rocketMQTemplate.syncSend(topic,message) 异步发送: rocketMQTemplate.asyncSend(topic,message,newSendCallback(){@OverridepublicvoidonSuccess(SendResultsendResult){System.out.println("Send success: "+sendResult);}@Overr...