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)