rabbitmq-workqueue自动确认改手动确认机制
Posted gavin苗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rabbitmq-workqueue自动确认改手动确认机制相关的知识,希望对你有一定的参考价值。
只发生在consumer端,关闭autoAck, channel.basicQos(1);只发送一条。 channel.basicAck(envelope.getDeliveryTag(),false);一条一条手工确认,
package com.gavin.mq.autoack; import com.gavin.utils.RabbitMQUtils; import com.rabbitmq.client.*; import java.io.IOException; import java.util.concurrent.TimeoutException; public class WorkConsumer { public static void main(String[] args) throws IOException, TimeoutException { Connection connection = RabbitMQUtils.getConnection(); Channel channel = connection.createChannel(); /** * 通道每次只能消费1个消息,不加这个默认消费者可以消费所有生产者发送的消息,比如消费5条,有可能消费者宕机丢失2条。 * 因此让能者多劳,换消费者2消费。 */ channel.basicQos(1); channel.queueDeclare("work",true,false,false,null); channel.basicConsume("work",false,new DefaultConsumer(channel){ @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { System.out.println(new String(body)); /** * 参数1:手动确认标识,确定队列中的哪个具体的消息 * 参数2:是否开启多个消息同时手工确认。每次确认一个 */ channel.basicAck(envelope.getDeliveryTag(),false); } }); } }
以上是关于rabbitmq-workqueue自动确认改手动确认机制的主要内容,如果未能解决你的问题,请参考以下文章