RabbitMQ学习(二)生产者确认和消费端消费

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lwl2014100338/article/details/82810776

问题

消息的生产者将消息发送出去之后消息是否正确的到达服务器

解决方式

(一)事物机制
通过channel.txSelect开启事物之后,可以发送消息到RabbitMQ,如果事物提交成功则消息一定到达RabbitMQ,如果事物提交之前由于其他原因抛出异常,这个时候可以将其捕获,进而执行channel.txRollback进行事物回滚,但是由于事物机制对于RabbitMQ性能有较大影响,所以不建议采用
(二)发送发确认机制
生产者将信道设置成confirm(确认模式),一旦信道进入信道模式,所有该信道上面发布的消息都会被指派一个唯一ID(从1开始),一旦消息被投递到所有匹配队列之后,Rabbit就会发送一个确认(Basic.ack)给生产者(包含消息的唯一ID),使得生产者知晓消息正确的到达了目的地。如果消息队列是持久化的,那么消息会在写入磁盘之后发出
如果因为RabbitMQ自身原因导致消息丢失,就会发送一条nack(Basic.Nack)命令,生产者可以回调方法中处理该nack命令

消费端

消费者可以通过推模式或者拉模式的方式获取并消费消息,当消费者处理完业务逻辑需要手动确认消息已被接收,这样RabbitMQ才能把消息从队列中标记清除。当消费者由于某些原因无法处理当前接收的消息可以通过channel.basicNack或者channel.basicReject拒绝

猜你喜欢

转载自blog.csdn.net/lwl2014100338/article/details/82810776