2

我知道Webjob是一個後端工作,Webapp可以通過Azure隊列調用它。 我的問題是如果Webjob完成,Webapp如何知道Webjob已完成,以及Webapp如何檢索由Webjob生成的結果?Azure Webjob如何將結果返回給webapp?

有什麼asyn方法可以在這種情況下工作? 也歡迎其他方法。

感謝

德里克

----------------更新------------------- -----

「ListQueuesSegmentedAsync」方法可以工作嗎?但我不知道如何使用它。

+0

ListQueuesSegmentedAsync:http://stackoverflow.com/q/31788798/4148708,但我不明白你爲什麼需要這樣做。如果您自己創建隊列名稱,爲什麼需要發現?看看錶存儲或Redis,以保持狀態,如果這太複雜了,儘管這可能不會像隊列系統一樣優雅。 – evilSnobu

+0

Redis現在可以做pub/sub,值得一看 - http://redis.io/topics/pubsub – evilSnobu

回答

1

您已經知道答案!消息隊列!

如果您需要超過幾KB的消息(也許您想傳遞一個JPEG文件),請將其放入Blob存儲中,並使用指示新到達Blob的完整路徑的隊列消息向Web App/WebJob發信號。

更多關於執行隊列爲中心的工作流程,在這裏看到我的其他答案:
https://stackoverflow.com/a/38036911/4148708

有時候,如果保持狀態不是你的第一個問題,可更容易實現一個系統,如果WebJob在WebApp中調用經過身份驗證的REST端點以GET/POST數據。

沒有銀彈。每種情況往往會有所不同,並可能從簡單性而非持久性(REST vs持久消息隊列)中受益。

哦,因爲你沒有特別要求異步,這裏是這樣做對REST的一種方式(隊列生性異步):

  • 呼叫從自己的WebJob
  • 返回202 Accepted的REST端點(在我給你,但是TPS報告還沒有準備好
  • 返回Location: https://webapp/{a-chunk-of-sha1-representing-a-unique-id} (標題的一點是這個網址告訴WebJob 檢查不時搶完TPS報告
  • 按照網址獲得結果,200 OK意味着你有他們,417 Expectation Failed意味着還沒有。其實HTTP 417是supposted用於迴應100 Continue,但你永遠不會使用,所以我減緩競選417 Expectation Failed與流行語如彈性擾亂與競爭對手。但我離題了。
+1

關鍵的問題是如何「用一個隊列消息向Web應用程序/ WebJob發信號」? Webapp將消息放入一個隊列中,然後給Webjobs提供信息。Webjobs可以將消息放入同一隊列嗎?謝謝 – derek

+0

當然可以,但它會讓事情變得很難跟蹤。使用**隊列#1作爲應用程序 - >作業**和**隊列#2作業 - >應用程序**。然後,您將知道什麼是什麼,更重要的是哪些組件關閉(因爲不再使用消息)。否則,你將不得不PeekLock每封郵件檢查「嘿,這是我還是WebJob?」。 – evilSnobu

+0

如果我有10個webjobs正在運行,並且如果我們使用第二個隊列將Webjob的所有結果傳回給Webapp,那麼Webjob將檢索每個消息以檢查它是否來自正確的Webjob。在檢查過程中,消息將從隊列中刪除,對嗎? – derek

相關問題