当前位置:   article > 正文

RabbitMQ 事务机制_rabbitmq的事务

rabbitmq的事务

存在一个问题:当生产者将消息发送出去之后,如何去确认消息到底有没有到达服务器。

  1. 通过事务机制实现:
  2. 通过发送方确认(publisher confirm )机制实现。

这边先介绍事务机制。

  • 相关的方法有三个: channel.txSelect;channel.txCommit和channel.txRollback
  • 在发送消息前开启事务:channel.txSelect;
  • 消息发送之后提交事务:channel.txCommit;
  • 发生异常组要回滚:channel.txRollback

模型图

  1. 客户端发送Tx.Select. 将信道置为事务模式;
  2. Broker 回复Tx. Select-Ok. 确认己将信道置为事务模式:
  3. 在发送完消息之后,客户端发送Tx.Commit 提交事务;
  4. Broker 回复Tx. Commi t-Ok. 确认事务提交
    在这里插入图片描述
    代码:
try {
            channel.txSelect();
            channel.basicPublish(EXCHANGE_NAME,ROUTING_KEY,false, properties, message.getBytes());
            channel.txCommit();
        } catch (Exception e) {
            e.printStackTrace();
            channel . txRollback();
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

事务回滚:当发生异常未能执行channel.txCommit();执行channel . txRollback();即可回滚
模型图:
在这里插入图片描述

try {
            channel.txSelect();
            channel.basicPublish(EXCHANGE_NAME,ROUTING_KEY,false, properties, message.getBytes());
			int i = 1/0;
            channel.txCommit();
        } catch (Exception e) {
            e.printStackTrace();
            channel . txRollback();
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

1.发送多条消息时,只要用channel.txSelect();channel.txCommit();将发送消息包裹起来即可
2.只有消息成功被RabbitMQ 接收,事务才能提交成功,否则便可在捕获异常之后进行事务回滚,与此同时可以进行消息重发。
3.但是使用事务机制会"吸干" RabbitMQ所以RabbitMQ提供了一个改进方案,即发送方确认机制。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/539734
推荐阅读
相关标签
  

闽ICP备14008679号