【问题标题】:BlobTrigger triggering job multiple times in Azure WebJobs 0.3 Beta在 Azure WebJobs 0.3 Beta 中多次触发 BlobTrigger 作业
【发布时间】:2014-07-15 00:32:55
【问题描述】:

升级到 WebJobs 0.3 beta 后,Azure WebJobs 会在将 Blob 发布到存储时多次调用我的方法(使用 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 仪表板中,它确实显示了被调用两次的函数。

这是为什么?

【问题讨论】:

    标签: azure-webjobs azure-webjobssdk


    【解决方案1】:

    从 0.5.0-beta 版开始,此问题已得到修复。 BlobTriggers 仅在检测到新 blob 或更新现有 blob 时触发。 更多信息请看这篇帖子http://azure.microsoft.com/blog/2014/09/06/announcing-the-0-5-0-beta-preview-of-microsoft-azure-webjobs-sdk/

    【讨论】:

      【解决方案2】:

      pianomanjh,这是一个已知的限制。有一些触发器和输出的组合不能很好地发挥作用。让我解释一下这在内部是如何工作的以及为什么这种情况不起作用:

      案例1:BlobTrigger(输入)+ Blob(输出):通过查找输出blob很容易知道输入blob是否被处理,输出blob必须存在并且更新。

      案例2:QueueTrigger(输入)+任意输出:很容易知道输入是否被处理,因为队列消息在处理后被删除。

      案例 3:BlobTrigger(输入)+ Queue(输出):要知道输入 blob 是否被处理不是很容易,因为队列中的消息可能存在也可能不存在。此外,我们不会在 blob 上存储任何元数据以了解它是否由特定函数处理。

      您遇到的是案例 3。解决方法是在处理 blob 后将其移动到不同的容器/目录中,这样就不会再次被选中。

      【讨论】:

      • 微软的一个已知限制,也许。我在博客、文档中的任何地方都没有看到这个。实际上,这意味着 BlobTrigger 并不是一个真正的选择,除非您正在执行 blob in/out。当您有其他情况时,应该可能会在破折号中抛出错误,或者至少会发出警告。我假设 Table 输出或 ServiceBus 输出也可以复制?
      猜你喜欢
      • 1970-01-01
      • 2016-04-12
      • 2014-12-12
      • 2011-01-30
      • 1970-01-01
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多