2014-01-19 164 views
7

我在Azure存儲中有一個名爲例如'messages'的隊列。每過1小時,一些服務就會推送一些消息來更新數據。但是,在某些情況下,我還會從其他位置推送此隊列消息,並且我希望立即處理此消息,並且我無法爲此消息設置優先級。Azure隊列消息優先級

這個問題的最佳解決方案是什麼? 我可以使用兩個不同的隊列('消息'和'消息優先'),或者它是一個壞的方法?

+0

對於Windows Azure隊列,您無法設置優先級消息,因此您唯一的選擇是使用2個獨立的隊列。我可以建議你看看Windows Azure服務總線隊列嗎?我沒有親自使用它,但我相信它比Windows Azure隊列更豐富。 –

+0

我還沒有使用Windows Azure服務總線隊列,但會嘗試調查它。 – bogdan

+0

https://msdn.microsoft.com/en-us/library/dn589794.aspx?f=255&MSPPError=-2147217396 – vladimir77

回答

7

正確的方法是使用多個隊列 - 「普通優先級」和「高優先級」隊列。我們實現的是單個輔助角色中的多個隊列讀取器線程 - 每個線程首先檢查高優先級隊列,如果其爲空,則查看普通隊列。這樣,高優先級的消息將由第一個可用線程處理(幾乎立即),並且無論消息來自何處,相同的代碼都會運行。它還節省了必須讓讀者不斷查看單個隊列,並且因爲很少有消息而必須退回。

+0

認爲這是一種好方法。謝謝。 – bogdan

+1

這種方法不存在飢餓問題嗎?給定足夠高優先級的消息,正常的消息隊列將永遠不會被服務? – urig

+0

好點,但是'高優先級'成爲新的'正常',並且你有一系列外部問題導致許多高優先級的消息 - 這是一個主要的業務問題或需要解決的恐慌。我們的系統記錄車輛跟蹤數據,'高優先級'用於碰撞檢測(將遙測數據發送至應急服務)。在那種情況下,**沒有辦法**,除非存在缺陷或世界即將結束,否則高優先級將超出正常狀態 –