RabbitMQ确认消息的方式

RabbitMQ默认是自动确认,也就是消息推送给消费者之后,马上确认并销毁。但是假如消费消息的过程中发生了异常,由于消息已经销毁,这样就会造成消息的丢失。

除了自动确认之外,还有三种确认方式:手工确认批量确认接受拒绝

一、手动确认。

也就是关闭了自动确认

channel.basicConsume("Queue", false, consumer);

采用try catch进行捕捉异常

使用

channel.basicAck(envelope.getDeliveryTag(), false);

可以手动确认一条消息,这里basicAck含有两个参数,第一个参数表示当前的投递标签号。相当于当前消息的Id.

每次向信道进行投递的时候都会产生一个投递标签号,每次加1,作为唯一标识。

第二个参数表示是否批量确认。true表示批量确认当前以及以前的所有消息。false表示不批量,只是当前这条消息。

二、批量确认

有了上面的解释,很容易知道,只需要将basicAck的false改为true,即可实现批量确认

三、接受拒绝

当向信道中投递的消息超过了消费者处理能力,就会造成消息积压。这是应该使用消息拒绝,放置消息无止境增长。

使用

channel.basicNack(envelope.getDeliveryTag(), false, true);

basicNack(long deliveryTag, boolean multiple, boolean requeue):deliveryTag表示被拒绝的消息的投递标签;multiple表示是否批量拒绝,若是则所有投递标签小于当前消息且未确认的消息也都将被拒绝,若否则仅拒绝当前消息;requeue表示被拒绝的消息是否重新放回队列,若是则消息会重新回到队列并选择新的消费者进行投递,若否则该条消息会被丢弃。

记录编程的点滴,体会学习的乐趣
原文地址:https://www.cnblogs.com/AduBlog/p/14778048.html