59-RocketMq的事务消息是如何实现的

RocketMQ 的事务消息实现主要是通过两阶段提交来保证消息的发送和事务状态的一致性

  1. 发送阶段:生产者首先发送一条预备消息(Prepared Message)到Broker。预备消息是一种特殊的消息类型,它标记为不可直接消费,而是需要通过事务ID查询实际状态后才可以消费

  2. 提交或回滚阶段:生产者在本地执行事务逻辑后,向Broker提交或回滚该事务如果提交,预备消息变为可消费状态;如果回滚,预备消息将被删除。

以下是使用RocketMQ客户端实现事务消息的简化代码示例:

// 1. 创建事务消息生产者
TransactionMQProducer producer = new TransactionMQProducer("producerGroup");
producer.setNamesrvAddr("namesrvAddr");
producer.start();
 
// 2. 创建消息
Message msg = new Message("topic", "tag", "message body".getBytes(RemotingHelper.DEFAULT_CHARSET));
 
// 3. 发送预备消息
SendResult sendResult = producer.sendMessageInTransaction(msg, null);
 
// 4. 事务执行逻辑
// ...
 
// 5. 提交或回滚事务
try {
    // 假设这是事务执行后的结果
    boolean transactionStatus = true; // true=提交, false=回滚
    producer.commitOrRollbackTransaction(sendResult, transactionStatus);
} catch (Exception e) {
    // 处理异常
    e.printStackTrace();
}
 
// 6. 关闭生产者
producer.shutdown();

在这个例子中,sendMessageInTransaction 方法负责发送预备消息。事务执行的结果决定了是否通过 commitOrRollbackTransaction 方法提交或回滚事务。如果提交,消息变为可消费;如果回滚,消息被删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值