2011-09-15 64 views
1

我正在考慮對交貨訂單至關重要的應用使用AMQP。保留交貨訂單

因此,我不能使用正常的重新傳遞功能,因爲未傳送的消息會無序地重新排隊。

它看起來像我必須做的是將郵件留在隊列中,直到它被處理,然後明確地刪除它。然後有可能相同的消息按順序處理兩次,但這很容易陷入並處理。

但是,我沒有看到如何做到這一點。我正在尋找的是一些窺視和刪除消息方法,讓我直接控制,但他們似乎並不存在。

我錯過了什麼,或試圖以錯誤的方式解決問題?

回答

0

您不能在AMQP中查看和刪除。實際上,您不能瀏覽隊列中的消息而不消耗它們,而Rabbit不提供任何擴展來啓用它。

對您的問題的一般回答是「如果您確實需要按順序約束,請仔細考慮」,因爲例如,使用該約束,您不能在隊列中擁有多個使用者。

+0

不幸的是訂單保存是非常必要的,我說最重要的是它。看看這些文檔,它看起來有可能將非確認消息放到一個單獨的恢復隊列中,以供消費者在開始時檢查,不知道我是否理解,儘管如此...... – Roger

+0

您可以做類似的事情,但是如果消費者從死信隊列中消費時死亡,你會怎麼做?添加另一個*隊列*只會將原始問題移到其他地方。 – scvalex

0

我一直在解決同樣的問題。在我的解決方案我已經包裹消息轉換成一個單個消息其中外消息一直處理的第一然後我有處理在包裹順序剩餘的內部消息 。這有一些缺點,例如大消息(一旦你的包裝層次結構包含許多消息),更難以序列化......,但對我來說這個解決方案是足夠合適的。