rocketmq的事务消息

最近在项目中遇到了一个保证消息不丢失的场景,于是就想到了rocketmq的事务消息

在RocketMQ中有一个非常有用的功能,就是事务消息功能,事务消息机制,可以让我们确保发送的消息一定能写进MQ里,绝不会丢失掉。

1、首先生产者发送half消息到MQ去,试探MQ是否正常

首先会发送一条prepare消息到broker中,这个消息消费者是不知道的,因为此时这个消息的topic已经被修改了。

如果half消息写入成功就进行本地事务的执行,若写入失败就不再向下执行。

2.生产者没接收到half写入状态

如果我们把half消息发送给MQ了,MQ给保存下来了,但是MQ返回给我们的响应生产者没收到,会怎么样?

这时候,生产者会误以为发送到MQ的half消息失败了,就不会执行后边的流程。

但MQ已经保存下来了一条half消息,这个消息怎么处理?

RocketMQ有一个补偿机制,他会去扫描自己处于half状态的消息,如果我们一直没有对这个消息执行commit或rollback操作,超过了一定的时间,他就会回调自己定义的回查接口看看事务的状态,看看是否commit/rollback。

3、生产者本地事务执行过程

在执行本地事务之后,执行的结果会发送到broker端,若为commit,那么消费端会看到这条消息进行消费,若为执行失败就进行删除消息。

若发送commit或者rollback,然后mq没有收到,此时也会进行回查。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值