rabbitmq高级特性 Consumer ACK
概念
手动确认 简单使用
编写配置文件 设置模式为手动
spring:
rabbitmq:
host: 192.168.198.129
port: 5672
username: admin
password: admin
virtual-host: /
publisher-confirm-type: correlated
publisher-returns: true
listener:
direct:
acknowledge-mode: manual
simple:
acknowledge-mode: manual
实现监听者类
package com.jie;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Component
public class RabbitMQListener {
@RabbitListener(queues = "boot_queue")
public void ListenerQueue(Message message, Channel channel){
long deliveryTag = message.getMessageProperties().getDeliveryTag();
try {
//接受信息
System.out.println(message);
//处理业务逻辑
System.out.println("处理业务逻辑----");
//int i = 3/0;
//手动确认
channel.basicAck(deliveryTag, true);
} catch (IOException e) {
e.printStackTrace();
//如果出现异常就拒绝确认
//第三个参数为true时 则broker会重新发信息给消费者
try {
channel.basicNack(deliveryTag,true,true);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
这样如果业务逻辑抛出异常就会去执行拒绝确认 同时broker会重新发送信息给消费者