我正在基於Windows Azure的基於Web的系統處理來自不同來源(web站點或web服務)的訂單。我腦海中出現的第一件事是從網站和Web服務角色使用Azure消息隊列到一些實際處理訂單的工作者角色。使用Windows Azure的基於消息的體系結構
我發現很少有關使用Azure的消息驅動體系結構的文章,它們看起來很好 - 我們從客戶端獲取消息,將它放入隊列並在用戶「確定,您的操作已處理完畢」之後,那個信息並且做所有魔術。 但這裏是一個問題 - 如果我想發送消息的處理結果(如果它是成功和失敗的原因,如果沒有的話)作爲對客戶端的響應比我需要等待工人角色處理它。問題是,我沒有找到好的/快速/廉價的方式來做到這一點,作爲一種可能的方式我可以把消息放入處理隊列,並檢查每個Xsese是否已經處理(在處理之後,Worker將會添加Y Guid消息與結果一起處理的信息)。
我不太喜歡這種等待的想法,因爲訂單處理的時間可以從幾秒到幾分鐘,如果每個客戶端(同時達到10-20個),系統會產生額外負載,將檢查每個X毫秒如果他的請求被處理或不(主要原因)。考慮到Azure Tables的訪問速度(次要原因),它也會非常昂貴。
您能否建議一些很好的實現方法?我正在尋找諸如桌面應用程序中的事件等待之類的事情,因爲高度分佈而無法使用Azure製作。
非常感謝@Travis提供的建議,它對網站的部分看起來相當不錯!但問題在於,對於Web服務用戶來說,它不會起到如此好的作用,因爲Web服務用戶是系統用戶的最大部分。 –
如果你需要阻止,直到它完成,在.NET上,我認爲你被困在沒有自己的東西。它將吃掉線程輪詢或等待響應。 – Travis
找到這種等待的方式是最初問題的原因 - 問題是#1角色將消息放入Azure隊列,#2角色正在處理它併產生結果。因此,如果#2角色完成了這項工作,那麼從#1角色中檢查的方式並不是很多,其中一個方法是通過Guid消息來檢查Azure Table,但正如我所提到的,從成本和性能角度來看, 1角色將需要定期檢查Azure表,直到做出結果)。問題是否有一種方法讓#1角色訂閱某個事件,當#2角色將完成它的工作時將觸發該事件? –