消息确认
RabbitMQ 每将一个消息交付给一个消费者时,会立刻把这个消息标记为被删除,如果消费者在处理消息时怠机了,那么这个消息就彻底消失了,这很明显不符合我们的期望,我们希望在一个消费者怠机时,把这个消息交付给其他消费者处理。
所以 RabbitMQ 让消费者在处理完消息后,返回确认消息,告知RabbitMQ 你确实可以删除这条消息了。
也就是
channel.basicConsume(TASK_QUEUE_NAME, autoAck, consumer);
或者
1
2
3
4
5
6
7 1try {
2 doWork(message);
3 } finally {
4 System.out.println(" [x] Done");
5 channel.basicAck(envelope.getDeliveryTag(), false);
6 }
7
给RabbitMQ 发送确认消息的通道,和接收这条消息的信道必须是同一条通道。否则会抛出异常,所以channel不能变。
RabbitMQ判断一个消费者死亡的依据是:通道关闭,连接关闭或者TCP连接丢失。