rabbitmq消费者设置手动ack

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

为什么要设置手动ack,消息确认

  1. 设置主动的主要作用是进行消息确认,
  2. 自动确认会在消息发送给消费者后立即确认,如果手动则当消费者调用ack,nack,reject几种方法时进行确认.
  3. 一般会设置手动模式,业务失败后可以进行一些操作.

    //消息的标识,false只确认当前一个消息收到,true确认所有consumer获得的消息

    channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);

    //ack返回false,并重新回到队列,api里面解释得很清楚

    channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);

    //拒绝消息

    channel.basicReject(message.getMessageProperties().getDeliveryTag(), true);

     

如何设置手动ack

1,设置消费监听配置
  acknowledge="manual"


		
		
	

2,实现ChannelAwareMessageListener 接口

package com.mq.rabbitmq;

import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.ChannelAwareMessageListener;

import com.rabbitmq.client.Channel;

public class ChannleConsumer implements ChannelAwareMessageListener {

	@Override
	public void onMessage(Message message, Channel channel) throws Exception {
		try {
			//消息的标识,false只确认当前一个消息收到,true确认所有consumer获得的消息
			channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
			System.out.println("onMessage方法结束");
		} catch (Exception e) {
			//ack返回false,并重新回到队列,api里面解释得很清楚
			channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);
			e.printStackTrace();
			System.out.println("onMessage方法异常结束");
		}
	}

}

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3647713/blog/1577807

你可能感兴趣的:(rabbitmq消费者设置手动ack)