【问题标题】:RabbitMQ DeliveryTag always 1RabbitMQ DeliveryTag 始终为 1
【发布时间】:2013-11-20 11:46:12
【问题描述】:

查看更新

我在本地机器上安装了 RabbitMQ,可以毫无问题地排队消息。

我正在使用 RabbitMQ 批准的 .NET 客户端库。

在将消息出列并成功处理后,我们的计划是使用 BasicAck 确认消息并传递 DeliveryTag。这似乎不起作用,因为消息都返回到就绪状态。

在 BasicGet 之后查看 DeliveryTag 的值始终为 1。我确信这是错误的,因为我怎么可能将该标签传递回 BasicAck 并期望一条消息被唯一标识。

我做错了什么? DeliveryTag 应该是唯一的引用,而不是“1”是吗?

更新

我每次都在重新创建 Channel,因此对 BasicGet 的调用和对 BasicAck 的调用在不同的 Channel 上。一旦我重用了频道,消息就会成功地通过 Ready -> Uacked -> Off the Q。

FWIW DeliveryTag 仍然是 1

除非有人想告诉我我不应该重复使用频道,否则我认为现在已经回答了。我知道重用 Channels 可能会出现多线程问题。

谢谢

拍拍

【问题讨论】:

  • 其实delivery-tag=1的意思是“最多并包括”(见rabbitmq.com/amqp-0-9-1reference.html#basic.ack.delivery-tag),所以一般情况下还是可以确认消息的,但是整个情况有点奇怪,可能是.NET伙计们提供更多细节?
  • 当我们调用 channel.BasicGet 时,我将 false 传递给 noAck,所以我认为“你是否使用自动确认”是一个否定。如果我们传递 true,DeliveryTag 仍然为 1,但消息离开队列。查看文档,multiple = 1 似乎意味着“最多并包括”而不是 DeliverTag。 rabbitmq.com/amqp-0-9-1-reference.html。我需要在同一个通道和连接上出列和 BadsicAclk 吗?

标签: .net rabbitmq amqp


【解决方案1】:

我每次都在重新创建 Channel,因此对 BasicGet 的调用和对 BasicAck 的调用在不同的 Channel 上。一旦我重用了频道,消息就会成功地通过 Ready -> Uacked -> Off the Q。

FWIW DeliveryTag 仍然是 1

除非有人想告诉我我不应该重复使用频道,否则我认为现在已经回答了。我知道重用 Channels 可能存在多线程问题。

谢谢

拍拍

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-05
    • 2014-03-04
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2015-06-04
    相关资源
    最近更新 更多