2014-07-15 88 views
1

升級到WebJobs 0.3測試版後,Azure WebJobs在將Blob發佈到存儲時多次調用我的方法(使用BlobTrigger作爲輸入)。在控制檯和Azure本地進行測試時都會發生這種情況。 在我而言,這是我在BlobTrigger,然後發佈到一個隊列,像這樣:BlobTrigger在Azure中多次觸發作業WebJobs 0.3 Beta

 public static void ProcessFactoryFileSubmission(
     [BlobTrigger(blobs.RESPONSE + "/{requestId}_{factoryId}_{filename}")] ICloudBlob blob, 
     [Table(tables.PACKAGE)] CloudTable table, 
     [Queue(queues.FACTORY_RESPONSE)] out FactoryPackageResponseMessage responseQueue) 

隊列越來越兩條消息,並在webjobs湛藍儀表盤它確實表明被調用兩次的函數。

這是爲什麼?

回答

2

pianomanjh,這是一個已知的限制。有一些觸發器和輸出組合不好,讓我解釋這是如何在內部工作的,以及爲什麼這種情況不起作用:

案例1:BlobTrigger(輸入)+ Blob(輸出):很容易知道輸入blob是否通過查找輸出blob ,它必須存在並且更新。案例2:QueueTrigger(輸入)+任何輸出:很容易知道輸入是否被處理,因爲隊列消息在處理後被刪除。案例3:BlobTrigger(輸入)+隊列(輸出):由於隊列中的消息可能存在或可能不存在,因此知道輸入blob是否被處理並不是很容易。另外,我們不在blob上存儲任何元數據以知道它是否被特定函數處理。

您正在處理案例3.解決此問題的方法是將blob移到其他容器/目錄中,一旦它被處理,不會再被選中。

+1

也許是微軟的一個已知限制。我在博客,文檔中沒有看到這一點。實際上,這意味着BlobTrigger並不是真正的選擇,除非你在進行blob輸入/輸出。否則,應該在短劃線中出現錯誤,或者至少發出警告。我假設表輸出或ServiceBus輸出也可以重複? – pianomanjh