2016-03-08 57 views
0

我正在使用WebJob通過觸發器方法從我的ServiceBus隊列中拉出,它似乎工作正常。問題是,我有一項夜間工作,將工作抽成隊列,然後當隊列工作最終處理以通過電子郵件發送結果時,我希望在最後運行另一項工作。我的WebJob目前一次處理16個項目,我可能必須運行多個WebJobs來處理負載,所以我不覺得我可以檢查每個觸發器上的Queue是否爲空。如何檢測ServiceBus隊列爲空?

ServiceBus在空的時候可以發出信號嗎?我是否應該再運行一次,每隔10分鐘檢查一次,並每天點燃一次,以確保它已完成?似乎效率低下。有一些我在這裏失蹤的Azure模式嗎?

回答

0

不檢查隊列是否爲空。當隊列上有新消息OnMessageOnMessageAsync事件將被觸發。你應該使用這些事件來消費。

您可以檢查Competing Consumers Pattern

+0

問題作者想知道如何檢測隊列已被用戶清空的場景,以便他可以創建新的「Job done」類事件或僅檢測和處理案例。 OnMessageAsync不會幫助他,因爲當隊列清空時它當然不會被調用。 – Shrulik

1

Azure的服務總線將無法通知有關空隊列。知道隊列中是否有任何數量的消息可能被認爲是反模式。作爲Clemens Vasters said

任何時候任何#Azure #ServiceBus客戶端代碼看起來在QueueDescription.MessageCount以確定是否調用接收 - 這是一個錯誤。不要

隊列可以在任何時間點包含工作項目。你永遠不知道什麼時候會結束。如果你的消息表示某個事物爲一個組,並且需要在該組處理結束時觸發一個操作,那麼你可以擁有一些可以跟蹤已完成的工作以及完成時的事情,並觸發另一個消息。這可能是「我處理了會話Y的X消息,因此這項工作已完成,發送通知命令」。