RabbitMQ-- Confirm模式

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

confirm原理

  生产者将信道设置成confirm模式,一旦信道进入confirm模式,所有在信道上发布的信息就会有一个唯一的ID ,将信息发送到队列之后,broker就会发送一个确认给生产者,这个确认是包含这个唯一ID ,这就可以保证每个信息都能存到队列的,如果信息队列是持久化的,那确认机制就会在进入磁盘后再发确认机制,broker回传给生产者的确认信息中deliver-tag欲包含可确认信息的序列号,此外broker也可以设置basic.ack的multiple域u,表示到这个系列号之前的所有信息都已经得到了处理。

优点

  异步,在得到确认机制前也可以发送其他信息,出现异常会发送Nack。

开启模式

  channel.confirmSelect();


异步模式

  Channe.对象提供的Confirmlistener()回调方法只包含deliveryTag(当前chanel发出的消息序号),我们需要自己为每一个channel维护一个UNconfirm的消息系列集合,没publish一条数据,集合中元素+1,每回调一次handleAck方法,UNconfirm集合删掉相应的一条(multiple=false)或者多条(multiple=true)记录。从程序运行效率上看,这个UNconfirm集合最好采用有序集合sortdeset存错结构。

猜你喜欢

转载自blog.csdn.net/dfhgshgdf/article/details/82318226