当前位置: 首页 > 知识库问答 >
问题:

Azure Functions Blob触发器不处理所有Blob

顾涵衍
2023-03-14

我的存储容器中大约有35k blob文件。其中一些是在部署功能之前的旧版本,一些是在部署功能应用之后的旧版本。

这是我的函数签名

 public async Task Run([BlobTrigger("portal/{filePath}")]Stream blob, Uri uri,
            IDictionary<string, string> metadata, string filePath, ILogger log)
        {
         log.LogInformation($"{filePath}\n Size: {blob.Length} Bytes");

       // rest of the code
        }

我的理解是,这个功能将不断处理所有新旧文件。但是当我在Azure portal上看到那个日志时,这就是发生的事情。

    < Li > 2020-01-21t 09:02:56.103[信息]已执行' watch-portal-blob '(成功,Id = 37 CFAF 56-3be 2-4e6f-9e 46-3558389 daf4f) < li>2020-01-21T09:04:33在过去的1分钟内没有新的跟踪。 < li>//更多时间戳 < li>2020-01-21T10:51:34在过去的108分钟内没有新的跟踪。 < li>2020-01-21T10:52:34在过去的109分钟内没有新的跟踪。 < li>2020-01-21T10:53:34在过去的110分钟内没有新的跟踪。 < li>2020-01-21T10:54:34由于超时120分钟,日志流会话已结束。

它随机处理几个文件,然后进入空闲状态,然后在几个小时后再次处理另外20个文件。任何人都可以指出我正确配置 blob 触发器以处理所有现有 blob 以及新的 blob 而不会中断吗?

仅供参考:我的所有 blob 都是简单的 XML 文件,每个文件小于 20 KB。它所做的就是读取XML验证并将其存储在MongoDB中。如果我在本地运行此作业,则在1分钟内至少将处理50个文件,因此应该完成30k个文件。在1月17日星期五,今天1月20日有大约35k文件,仍然有32k文件(新增文件约为2k)。这意味着它在3天内只处理了5k文件。

共有2个答案

沙海
2023-03-14

在引擎盖下,它使用一些事件通知来触发你的功能。这意味着您的旧blobs将不会被触发,除非您在那时更改了某些内容(例如元数据)。

或者,您可以创建一个逻辑应用程序并使用Azure Storage Connector List blobs操作,然后在传递每个blob的工作流中链接您当前的Azure函数。

https://docs.microsoft.com/en-us/connectors/azureblobconnector/#list-blobs

阚亮
2023-03-14

我建议阅读触发器 - blob 收据和触发器 - 轮询

对于您的解决方案,当在blob存储中创建/删除blob时,应该考虑将Azure事件网格用于实时推送通知。

 类似资料:
  • 问题内容: 为了测试查询的正确性,我需要禁用db中的所有触发器。我看到在information_schema中存在表TRIGGERS。是否可以使用此表暂时禁用所有触发器?例如: 完成所有测试后,返回所有触发器,例如: 可能这可能会损坏db或在触发后将不起作用?我没有在文档中找到它。 问题答案: 您不能直接禁用触发器,我也不建议您做您建议的事情,但是您可以让触发器检查变量(在下面的示例中)是否 在执

  • 我正在使用spring批处理使用RepositoryItemReader从postgresql DB读取记录,然后将其写入主题。我看到大约有100万条记录需要处理,但它并没有处理所有的记录。我已经将reader的pageSize设置为10,000并且与提交间隔(块大小)相同

  • 我有一张如下的桌子 数据将从AWS Lambda函数一致地插入到此表中。(可能是数百万个项目) 我有一个用例,当表中有100个可用项时,我需要有一个触发器来执行一些批处理。换句话说,一旦我们在这个表中创建了100个新项目,我希望有一个Lambda触发器函数来对100个项目执行批处理。 当我研究时,DynamoDB流似乎可以支持批处理,但根据文档我不太清楚。 Lambda分批读取记录,并调用函数处理

  • 我的批处理作业不处理所有已读记录。 完成作业后,Spring批处理日志中读取了198282条记录,但在处理器中我有一条日志,在开始处理之前只记录了196503条,但有时,处理器处理了所有的记录。 步进 Spring启动版本:2.0.1

  • 我们有一个作业,它使用cron表达式在下午1点到5点之间每隔M-F轮询一次文件和数据库。在此期间,如果文件到达,它将下载文件并调用作业。这很好,我们使用了spring集成和批处理。 现在,我们需要一些定制,其中我们有多个作业,其中job1应该像上面一样轮询。一旦文件处理成功,它应该停止轮询。 第二个要求是,若在轮询期间并没有收到文件,我们希望向ops团队发送一些通知,以便他们可以采取一些行动。

  • 我正在尝试使用Spark结构化流的功能,触发一次,来模拟一个类似的批处理设置。然而,当我运行我的初始批处理时,我遇到了一些麻烦,因为我有很多历史数据,因此我也使用了这个选项。选项(" cloud files . includeexistingfiles "," true ")也处理现有文件。 因此,我的初始批处理变得非常大,因为我无法控制批处理的文件量。 我也尝试过使用选项 cloudFiles.