rabbitmq mysql事务_RabbitMQ学习第七章:消息确认机制之事务机制

RabbitMQ消息确认机制之事务机制。

RabbitMQ中,我们可以通过持久化数据 解决RabbitMQ服务器异常

的数据丢失问题。

问题:生产者将消息发送出去,消息到底有没有到达RabbitMQ服务器

默认的情况下是不知道的。

两种方式:

1.AMQP实现了事务机制,类似mysql的事务。

事务机制三个方法:

txSelect:用于将当前changel设置成transation模式。

txCommit:用于提交事务。

txRollback:回滚事务。

通过txSelect开启事务后,便可以发送消息给RabbitMQ服务器,通过

txCommit提交成功,如果提交之前出现了异常,就txRollback回滚。

问题:开启-提交-回滚,每次提交,都相当于一次请求,降低了消息的吞吐量,

因为走的通信太多,大量消息就会大量请求服务器,很耗时。

例:

生产者

0aa172909094227febb0e0e7528d5141.png

消费者:

a834fc9cd955676dde8fc409f48016b9.png

图中发送消息逻辑没有问题,所以发送的消息会成功

c528087553cb7d303531181be6763aa8.png

c42d1a9e3b6ccc266604f2a4f076cb46.png

如果生产者代码中执行了错误的逻辑,比如:

99f37b373870ac0c6abaedc7ff3a9ea3.png

这时候再发送消息,就会失败,并回滚。

22cfdce7ffe8acb0185aa418a77dbea5.png

c93098586ceb92b0e3d0dd1f7dc69b64.png

2.confirm模式。

生产者端confirm实现原理:生产者将信道设成confirm模式,一旦信道进入到

confirm模式,所有在该信道发布的消息都会指派一个唯一消息id,一旦消息被投

递到所匹配的队列之后,就会发送一个确认给生产者(包含消息id),

这就使得生产者知道了这个消息已经正确到达了队列。如果消息和队列是可持久

化的,确认消息会将消息写到磁盘后在发出。

Confirm模式最大的好处在于它是异步的。

开启confirm模式:channel.confirmSelect();

编程模式:

2.1.普通:发过去(一条)后会调用waitForConfirms()(串行)。

2.2.批量:发过去(一批)后会调用waitForConfirms()(串行)。

2.3.异步confirm:提供一个回调方法,服务端confirm一条或多条后客户端会调用。

例:

Confirm普通模式 生产者:

ba048b6f656bf835a3d583b6332948ff.png

954385243f583d22a106046ed630402e.png

消费者:

1ba0b732a006fc3e8f250db70cde41f2.png

2dc226303002c7730d9fc51bdfe9e34c.png

Confirm批量模式(普通模式+for循环) 生产者:

8138303992cc4d4e5dbbc6e21ee93ea9.png

消费者:

64044e6769d3cf0be5a0bb888da90400.png

confirm模式-异步

channel对象提供的confirmListener()回调方法只包含deliveryTag(当前channel发出

的消息序号),我们需要自己为每一个channel维护一个unconfirm的消息序号集合,

每publish一条数据,集合中元素加1,每回调一次handleAck方法,unconfirm集

合删掉相应的一条(multiple=false)或多条(multiple=true)记录,从程序运行效

率上看,这个unconfirm集合最好采用有序集合SortedSed存储结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值