2015-10-20 63 views
1

我有一個非常基本的體系結構:有一種方法可以在Azure隊列或服務總線中獲得「處理完成」消息事件?

Queue和Worker(後臺處理服務)中的Web API隊列消息正在出隊並處理消息。

問題是Web API不知道工作人員處理了messaged的時間。

工作者是否可以提醒隊列消息已成功處理,並且隊列發送回Web API「處理完成消息」事件?

一個解決方案,我想上:在Web API排隊的消息

後,它會檢查每對夫婦的第二個消息狀態:

如果消息狀態是「派克鎖「 - 消息仍在處理中。

如果消息未在隊列上找到 - 消息已處理(成功或失敗,則無關緊要)。

但是,Microsoft沒有預先制定的解決方案?

回答

3

需要此類報告的許多體系結構都由單獨的隊列處理,從處理器到請求者。這就是爲什麼BrokeredMessage對象上甚至有一個ReplyTo property。這個方法將會是請求者擁有它自己正在觀看的隊列。當它創建一條消息時,它會設置ReplyTo屬性並將其發送。當工作人員處理消息時,它使用原始消息提供的隊列路徑將完成消息發送回請求者。

根據您的需要,您可能爲您的整個前端擁有單個隊列,或者每個實例可能都有自己的隊列。請注意,在機器可能是瞬態的分佈式系統中,每個Web API前端都有自己的隊列可能會帶來一些複雜性。

通常這是在請求者需要知道某件事完成時完成的,因此它可以以某種方式進行通信。例如,一個Web請求來進行處理。請求被放到隊列中並在後端處理,並且完成消息返回到被拾取的前端,並且向用戶發送通知(在某些情況下通過SignalR,其中具有背板)你不必擔心哪個前端服務器收到響應消息)。

除了通過與請求者的直接通信或通過隊列傳遞完成信息之外,沒有任何東西允許您監視來自另一臺計算機的消息的完成。查看消息狀態不會對您有所幫助,因爲除非您經常收到對消息的新引用,否則這些信息不會改變,如果您有很多消息需要處理,這些消息將無法很好地擴展。

+0

感謝Mike,所以如果我正確理解你的話,我會在Web-API和所有Worker實例之間有一個主隊列,並且對於主隊列中的每個工作(消息),我都會有另一個子隊列用於在Web -API和特定的工作人員處理工作? – Ron

+0

一個隊列將Web-API處理爲工作程序路徑。然後,如果特定的發起請求Wep-API服務器需要知道該過程已完成,那麼可以是所有Web-API服務器正在監視的單個隊列,也可以是每個Web-API服務器的隊列。這取決於Web-API服務器在響應中所做的事情。 – MikeWo

+0

因此,對於最簡單的場景,我需要兩個隊列: 1 - Web API將作業發佈到其中。 2 - 用於Web API監視作業完成情況。 我說得對嗎?如果你有任何關於它的文章的外部鏈接,我會感謝:) 謝謝邁克 – Ron

相關問題