2017-08-15 74 views
1

我正在寫一個函數將大量輸入圖像拼接成一個高度圖像,並將其保存到輸出blob。有沒有辦法綁定到來自隊列觸發器的可變數量的輸入?Azure函數 - 綁定隊列中的斑點列表觸發器

下面是一個例子隊列項:

{ 
    "inputIds": [1001, 1002, 1003, 1004], // Input blobs "inputs/1001.jpg", etc. 
    "outputId": 15      // Output blob "output/15.jpg" 
} 

我在選擇in the docs當時一看,我的現在的想法是使用一個CloudBlobContainer我認爲一個[Blob]屬性允許:

[FunctionName("stitch")] 
public static async Task Run(
    [QueueTrigger("stitch")]QueueItem queueItem, 
    [Blob("inputs")]CloudBlobContainer inputContainer, 
    [Blob("results/{outputId}.jpg")]CloudBlockBlob output) 
{ 
    IList<CloudBlockBlob> inputs = await GetBlobsAsync(inputContainer, queueItem.InputIds); 
    Stream result = ConcatImages(inputs); 
    await output.UploadFromStreamAsync(result); 
} 

在這種情況下,QueueItem是一個自定義類,GetBlobsAsync()ConcatImages()是我可以實現的功能。

可我直接綁定到IEnumerable<CloudBlockBlob>(或IEnumerable<Stream>),如果是這樣我會怎麼寫[Blob]輸入屬性?

編輯:我可以這樣做,而不是在同一時間加載所有輸入blob內容到內存中?我需要一次流一個。

回答

1

我建議你的架構是錯誤的。

您似乎正在正確使用隊列觸發器和定義成像拼接任務範圍的有效載荷QueueItem,但爲什麼要綁定到輸入blob存儲?輸入Blob需要在循環訪問inputIds時在代碼中動態獲取。這樣做也解決了您同時在內存中輸入所有Blob的問題。

相關問題