2014-07-15 37 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