我有一個流程,可以向Azure存盤佇列添加一個條目。 它運行得很好。 我運行該代碼,可以看到佇列中有一個條目,并有我期望的文本。
我有一個 Web 服務,可以從佇列中取消排隊并處理該條目。 我已將該 Web 服務發布到 Azure 應用服務中。 該 Web 服務對 GET 進行了回應。 它作業得很好。 我把URL輸入到網路服務的方法中。 我可以看到,在 Web 服務完成后,佇列中的條目并不存在,而且通過查看后端的結果,我發現它們已經按照我的預期進行了處理。
我想將這些聯系起來。 當一個條目被排隊時,我希望 Web 服務能夠啟動。 我想使用 Azure 函式應用程式。 我已經創建了該函式應用程式,并使用門戶向其添加了一個函式。 我想要的函式觸發器是在一個條目被添加到存盤佇列時觸發的。 我在應用中添加了一個Powershell函式,Powershell 7,使用了佇列專案的模板。 我在AzureWebJobsSorage應用設定中填入了存盤賬戶的連接字串。 我到了代碼/測驗。 我把該函式的內容替換為:
& Invoke-WebRequest -Uri https:/span>//[service]. azurewebsites.net/path/to/the/web/method。
當在我桌上的PWSH終端中輸入這行時,這行做了我所期望的事情。 我所期望的是,我有一個Azure函式,它不期望有任何引數,當一個條目進入佇列時,它將發出一個網路請求。 我想要的(C#-oid)函式簽名是:
void f() {...}
當我用測驗/運行按鈕運行時,我得到一個錯誤,即沒有為QueueIte.Stack定義引數。 沒錯。 來自框架的樣本資料并不相關,所以我可能會想到,給它一個它不需要的引數可能會顯得很特別。 我在門戶中沒有看到我如何能夠停止向它提供它不需要的引數。
我通過運行排隊等待專案的行程來進行實際嘗試。 我在監控器中得到一個錯誤報告:"輸入不是一個有效的 Base-64 字串,因為它包含一個非 Base 64 字符,兩個以上的填充字符,或者在填充字符中包含一個非法字符。
似乎函式框架正在以某種方式尋找輸入,并對得到的輸入感到失望,而且不知道在得到輸入后該如何處理。 請幫助我理解如何才能使這個函式放棄尋找輸入。 我錯過了什么?
uj5u.com熱心網友回復:
我所期望的是,我有一個Azure函式,它不期望有任何的 的函式,當一個條目進入佇列時,它將發出一個網路請求。 佇列中時發出網路請求。
如果我理解正確的話,你想讓Azure函式在有訊息添加到佇列時觸發,但你不想對該訊息做任何事情(函式沒有引數)。
如果是這樣的話,那么不幸的是,這并不可行。基本上,Queue Triggered Function背后的意圖是,您想對該訊息進行處理。對于佇列觸發函式(或任何Azure函式),你必須遵守Azure的規則,即你的方法簽名必須與Azure函式運行時所期望的相匹配。
在你的函式代碼中,你可以自行決定如何處理該訊息。你甚至可以有一個空的函式主體(即沒有代碼)。
此外,Queue Triggered Function 希望訊息主體是base64 encoded string。你將需要對你在佇列中寫入訊息的程序進行修改,以便你將base64編碼的資料作為訊息內容發送。
說到你的具體案例,我認為你的方法是行不通的。基本上,你希望Azure Function在訊息被添加到佇列中時觸發,但你希望在你的Web應用程式中處理該訊息。這樣做的原因有兩個:
Peek-Lock模式下,通過對訊息進行dequeue來獲取訊息。只要訊息處于去排隊狀態,它就不能被其他消費者(例如,你的Web應用程式)使用。因此,如果你的Web應用程式試圖讀取該訊息,它將無法找到它。
你可以做的是在你的函式代碼中讀取訊息內容,并將訊息內容發布到你的 Web 應用程式中,然后它就可以使用該內容了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/326103.html
標籤:
