升级到WebJobs 0.3 beta后,当blob发布到存储时,Azure WebJobs会多次调用我的方法(使用BlobTrigger作为输入)。在控制台本地测试和Azure中都会发生这种情况。 就我而言,我正在使用BlobTrigger,然后发布到队列中,如下所示:
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 azure仪表板中,它确实显示了被调用两次的函数。
为什么会这样?
答案 0 :(得分:3)
此问题在0.5.0-beta时已修复。只有在检测到新blob或更新现有blob时才会触发BlobTriggers。 有关详细信息,请参阅此帖http://azure.microsoft.com/blog/2014/09/06/announcing-the-0-5-0-beta-preview-of-microsoft-azure-webjobs-sdk/
答案 1 :(得分:2)
案例1:BlobTrigger(输入)+ Blob(输出):很容易知道输入blob是否通过查找输出blob来处理,输出blob必须存在且更新。
案例2:QueueTrigger(输入)+任何输出:很容易知道输入是否被处理,因为队列消息在被处理后被删除。
案例3:BlobTrigger(输入)+队列(输出):由于队列中的消息可能存在或可能不存在,因此不容易知道是否处理了输入blob。此外,我们不会在blob上存储任何元数据,以了解它是否由特定函数处理。
你正在遇到案例3.解决这个问题的方法是在blob被处理后将其移动到另一个容器/目录中,这样就不会再次选择它了。