當我們將更多的node.js代碼移植到Azure函數中時,我們在Azure文檔中看到了使用存儲隊列的參考,這是委派處理責任而不是使用http請求調用其他函數的首選方式。如何在請求/響應模式下使用Azure存儲隊列?
我們應該爲這個委派使用什麼樣的請求/響應設計模式?具體而言,如何通過隊列發回的響應僅發送到發出請求的函數?
這裏是我們想要做的一個例子:
- 請求進入到一個HTTP觸發功能A
- 功能A放置消息到隊列X(JSON格式)與第一鍵爲獨特的requestId:「ABC345」開始監聽到隊列Y表示響應
- 功能B出隊此消息並工作
- 功能B宿加
- 功能A與工作結果的消息進入隊列Y中的requestId:「ABC345」
- 功能A看到此消息的requestId:「ABC345」,並返回HTTP響應
我們怎樣才能函數的回暖只是它正在等待請求對於?
getMessage方法似乎並不能夠選擇性地收聽到一個隊列,只搶到頂消息:
getMessage(queue [, options], callback)
這一換個角度是,如果我們想要多個工作職能聽隊列X.功能C將處理具有requestType:「query」的所有請求,而功能D將處理所有requestType:「blob」。沒有這個過濾,我們會爲每個Worker函數使用一個隊列。這是否也是正確的方式?
注意:我們使用的是node.js,但我假設Queue API在所有SDK中都是等價的。
謝謝這些細節。我的問題是關於如何在上面的列表中完成#2。我們希望做的事情在持久函數模式#1(鏈接)中進行了描述,但每個步驟都單獨運行在100ms或更短的時間內,希望我們可以在1-2秒內以端到端的方式返回響應,這很好在我們可接受的閾值內 – Graham
如果一切都是1-2秒,你可以堅持使用HTTP嗎?卸載到隊列不會爲你買東西。 –
除Microsoft不建議使用HTTP從其他函數調用函數。看起來他們正在爲我們弄清楚這一點,但還沒有完成。 – Graham