2013-11-20 48 views
0

請參閱更新的RabbitMQ DeliveryTag總是1

我已經安裝在本地計算機上的RabbitMQ,可以沒有任何問題的隊列中。

我正在使用RabbitMQ批准的.NET客戶端庫。

在將郵件出隊併成功處理之後,我們的計劃是使用BasicAck確認郵件並傳遞DeliveryTag。這似乎不起作用,因爲這些消息都返回就緒狀態。

在BasicGet之後查看DeliveryTag的值總是1.我確信這是錯誤的,因爲我怎麼可能將該標記傳遞給BasicAck並期望消息被唯一標識。

我在做什麼錯? DeliveryTag應該是一個獨特的參考,而不是「1」是?

UPDATE

我每次這樣的調用BasicGet和調用BasicAck是在不同的通道重建通道。有一次,我重複使用的信道傳遞消息的準備,通過已成功移動 - > Uacked - >關閉的Q.

FWIW的DeliveryTag仍爲1

除非有人想告訴我,我不應該再利用渠道,我認爲這是現在的答案。我知道重複使用頻道可能存在多線程問題。

感謝

帕特

+0

你使用自動ACK? – pinepain

+0

實際上,delivery-tag = 1的意思是「最多包括」(見http://www.rabbitmq.com/amqp-0-9-1reference.html#basic.ack.delivery-tag),所以一般來說仍然可以承認消息,但整個情況有點奇怪,也許.NET的人提供更多的細節? – pinepain

+0

當我們調用channel.BasicGet時,我爲noAck傳遞false,所以我認爲這是否是「你使用auto-ack」。如果我們傳遞true,那麼DeliveryTag仍然是1,但消息要離開隊列。看看文檔,似乎multiple = 1意味着「達到幷包括」而不是DeliverTag。 http://www.rabbitmq.com/amqp-0-9-1-reference.html。我是否需要在同一頻道和連接上使用Dequeue和BadsicAclk? –

回答

0

我每次這樣的調用BasicGet和調用BasicAck是在不同的通道時重建通道。有一次,我重複使用的信道傳遞消息的準備,通過已成功移動 - > Uacked - >關閉的Q.

FWIW的DeliveryTag仍爲1

除非有人想告訴我,我不應該再利用渠道,我認爲這是現在的答案。我知道重複使用頻道可能存在多線程問題。

感謝

帕特