public void listen1(String msg, Message message, Channel channel) throws Exception
Message message(完整的消息对象)
Spring AMQP 封装的消息,包含:
message.getBody():获取消息体(字节数组)message.getMessageProperties():获取消息的属性,如messageId, headers, deliveryMode等
适用于 获取消息元数据,如:
String contentType = message.getMessageProperties().getContentType();
Channel channel(RabbitMQ 通道)
手动
ACK/NACK消息 时使用当
@RabbitListener(ackMode = "MANUAL")手动确认消息 时,需要用channel来ACK或NACK示例:
long deliveryTag = message.getMessageProperties().getDeliveryTag();
try {
// 处理消息
log.info("处理消息: {}", msg);
// 手动ACK确认
channel.basicAck(deliveryTag, false);
} catch (Exception e) {
// 处理失败,NACK并重新入队
channel.basicNack(deliveryTag, false, true);
}
deliveryTag 作用
在 RabbitMQ 中,每个消费者接收到的消息 都会附带一个 deliveryTag,这个 deliveryTag 由 RabbitMQ 为每个信道(channel)维护,用于唯一标识该信道上的消息。
作用:消费者处理完消息后,必须使用
deliveryTag来告诉 RabbitMQ 该消息的状态:
成功消费 →
basicAck(deliveryTag, false)确认(ACK)消费失败 →
basicNack(deliveryTag, false, true)拒绝(NACK)丢弃消息 →
basicReject(deliveryTag, false)




