rabbitmq中的consumerTag和deliveryTag分别是干啥的,有什么用?

RabbitMQ消息确认机制
本文介绍了RabbitMQ中consumerTag和deliveryTag的作用。consumerTag作为会话标识符,在同一会话中保持不变;deliveryTag作为消息处理通道标识符,每次接收到消息时递增。通过使用deliveryTag结合basicAck方法,可以实现消息处理成功的确认,从而通知RabbitMQ清除已处理的消息。

同一个会话, consumerTag 是固定的 可以做此会话的名字, deliveryTag 每次接收消息+1,可以做此消息处理通道的名字。

因此 deliveryTag 可以用来回传告诉 rabbitmq 这个消息处理成功 清除此消息(basicAck方法)。

 

转载于:https://my.oschina.net/LucasZhu/blog/1537572

RabbitMQ 中,`basic_ack` `basic_consume` 是两个紧密相关但功能不同的方法,它们共同构成了消费者与消息队列之间交互的核心机制。 ### `basic_consume` `basic_consume` 方法用于启动一个消费者,使其订阅某个队列,并开始接收来自该队列的消息。此方法允许设置自动确认(autoAck)参数,决定消息是否在送达消费者后立即被标记为已确认[^1]。当 `autoAck` 设置为 `false` 时,意味着需要手动确认消息,即消费者必须显式地发送确认信号给 RabbitMQ,告知其已经成功处理了消息,这样 RabbitMQ 才会从队列中移除这条消息。 ### `basic_ack` `basic_ack` 是用来手动确认消息的方法。只有在 `basic_consume` 调用时设置了 `autoAck` 为 `false` 的情况下才需要使用 `basic_ack`。通过调用 `basic_ack` 并提供相应的 deliveryTag,消费者可以通知 RabbitMQ 某条特定的消息已经被正确处理,从而允许 RabbitMQ 安全地从队列中删除这条消息。如果在处理消息过程中发生错误或异常,可以选择不发送 ACK 确认,或者使用 `basic_nack` 或 `basic_reject` 来拒绝消息。 ### 关系总结 简而言之,`basic_consume` 负责启动消息的消费过程,而 `basic_ack` 则是在手动确认模式下,确保消息被正确处理后再从队列中移除的关键步骤。两者结合使用,能够实现高效、可靠的消息处理流程。 ```java // 示例代码:手动确认模式下的消息处理 boolean autoAck = false; channel.basicConsume(queueName, autoAck, new DeliverCallback() { @Override public void handle(String consumerTag, Delivery delivery) throws IOException { try { // 处理消息... System.out.println("Received message: " + new String(delivery.getBody(), "UTF-8")); // 手动发送确认 channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false); } catch (Exception e) { // 出现异常时可能选择拒绝消息 channel.basicNack(delivery.getEnvelope().getDeliveryTag(), false, true); } } }, consumerTag -> {}); ``` 上述代码展示了如何在 Java 客户端中使用 `basic_consume` 启动一个非自动确认模式的消费者,并在消息处理完成后调用 `basic_ack` 发送确认。此外,还包含了异常处理逻辑,其中可能会调用 `basic_nack` 来拒绝一条消息。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值