通常會設置手動模式,業務失敗後能夠進行一些操做.java
//消息的標識,false只確認當前一個消息收到,true確認全部consumer得到的消息spring
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
//ack返回false,並從新回到隊列,api裏面解釋得很清楚api
channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);
//拒絕消息ide
channel.basicReject(message.getMessageProperties().getDeliveryTag(), true);
1,設置消費監聽配置
acknowledge="manual"spa
<rabbit:listener-container connection-factory="connectionFactory" acknowledge="manual"> <!-- queues 監聽隊列,多個用逗號分隔 ref 監聽器 --> <rabbit:listener queues="test_queue_key2" ref="Consumer2" /> </rabbit:listener-container>
2,實現ChannelAwareMessageListener 接口code
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方法異常結束"); } } }