2012-06-15 117 views
4

某人成功用於在Windows Azure上實現作業處理的設計是什麼?Windows Azure上的作業隊列設計

要求:

  1. 能力來推動工作到隊列中。
  2. N個工作人員可以從隊列中消耗工作並處理它們。
  3. 工作的調用者應該能夠被提醒(推送,而不是投票)正在完成的工作。

已有的研究結果:

  1. 創建使用Azure的服務總線隊列http://blogs.msdn.com/b/appfabric/archive/2011/05/17/an-introduction-to-service-bus-queues.aspx
  2. Web前端 「作業」 隊列推作業隊列,工人塊接收( ),直到作業準備就緒(以避免由於API調用交易成本而導致花費的「空」長輪詢)

關於被通知工作完成:

  1. 沒有明顯的能力提醒工作完成時。 我以爲我可以利用服務總線主題/訂閱(https://www.windowsazure.com/en-us/develop/net/how-to-guides/service-bus-topics/),並有一個主叫方「訂閱」「工作完成通知」主題,但是:
    • 您顯然不能多次訂閱同一主題,除非您創建了多個「訂閱」條目(不擴展)
    • 除非我們爲每個作業ID創建了「訂閱」,並且在Receive()API調用(使用I/O完成端口)上有調用者塊,在訂閱上,我們無法獲得何時處理作業的實時通知。

有沒有人有實施這種作業系統的任何體驗(實時,低延遲,與完成通知呼叫者)之前?

謝謝

回答

2

實際上,隊列不支持推。關於隊列的整個想法是接收者不需要實時接收消息,並且想要定期檢查消息。如果您需要實時通信,則可以在接收端創建HTTP/TCP偵聽器,並讓發件人發出HTTP/TCP請求。

因此,一種方法是使用內部端點在Web角色上創建Web服務。使用隊列將服務的地址和消息一起發送給工作者角色。作業完成後,工作人員角色調用服務以通知Web角色該作業已完成。

這種方法很好,但沒有提供太多的價值。它不能在UI上顯示某些東西(除非你實現了web套接字),因爲服務器不能通知瀏覽器。所以如果你想在瀏覽器客戶端顯示一個通知,我想建議你使用一個pull解決方案(除非你實現web套接字)。如果您使用的是富客戶端,則可以在客戶端計算機上託管Web服務,並讓工作者角色通過調用該服務來通知客戶端。

最好的問候,

Ming Xu。