Azure functions Azure事件触发器多次触发同一文件

Azure functions Azure事件触发器多次触发同一文件,azure-functions,azure-eventgrid,Azure Functions,Azure Eventgrid,我有一个blob存储容器,在其中我配置了一个事件网格触发器(blob已创建)。我正在通过Data factory加载此blob存储文件,很多时候,可能会在一次操作中出现许多文件。也许我们可以举20个文件为例 好消息是我的事件网格触发器正在启动,函数app被调用。但是,我可以看到,对于同一个文件,有时会多次触发事件网格触发器 在这20个文件中,很少有非常大的文件,比如300MB,但其他文件非常小,比如3KB。所以我的疑问是,当这个300 MB文件被激发并且还在处理时,它会并行地再次拾取相同的300

我有一个blob存储容器,在其中我配置了一个事件网格触发器(blob已创建)。我正在通过Data factory加载此blob存储文件,很多时候,可能会在一次操作中出现许多文件。也许我们可以举20个文件为例

好消息是我的事件网格触发器正在启动,函数app被调用。但是,我可以看到,对于同一个文件,有时会多次触发事件网格触发器

在这20个文件中,很少有非常大的文件,比如300MB,但其他文件非常小,比如3KB。所以我的疑问是,当这个300 MB文件被激发并且还在处理时,它会并行地再次拾取相同的300 MB文件(因为它感觉它仍然没有被读取),并多次保存在db中,这不是我想要的


Azure事件网格是否适合此场景?

我可以看到,您打开了一个新的解决问题的方法,该方法也基于事件处理的推送模式

我确实建议使用推拉模式,其中AEG将向队列存储发送事件,然后根据需要可由Azure队列触发器函数以并发方式处理,请参阅更多详细信息

注:

  • 消费计划AF的默认超时时间为5分钟,最大超时时间为10分钟。如果此时间不足以处理大型blob,则应使用高级计划,其中默认超时为30分钟,最长时间为60分钟

  • 如果您希望将业务逻辑保留在ADF管道中,请查看从azure函数调用管道有多容易


  • 我可以看到,您打开了一个用于处理您的问题的新窗口,该窗口也基于事件处理的推送模式

    我确实建议使用推拉模式,其中AEG将向队列存储发送事件,然后根据需要可由Azure队列触发器函数以并发方式处理,请参阅更多详细信息

    注:

  • 消费计划AF的默认超时时间为5分钟,最大超时时间为10分钟。如果此时间不足以处理大型blob,则应使用高级计划,其中默认超时为30分钟,最长时间为60分钟

  • 如果您希望将业务逻辑保留在ADF管道中,请查看从azure函数调用管道有多容易


  • 看起来,您的订阅服务器(如ADF管道)需要30秒以上的时间,请参阅No。。。我所有通过ADF的文件都会在40秒内复制。因此,我认为ADF不是问题所在。请再次尝试读取该链接,如果AEG在30秒内未收到来自订户(ADF)的响应,则在交付过程中会发生什么情况,因此,当ADF发送后一个响应(例如~40秒)时,AEG根据调度程序时间开始重试交付,更多细节可以在该链接中找到。另外,看看AEG的交付时间指标,等等。是的,你是对的,它需要30多秒的时间来重试。是否有可能,如果重试/响应时间可以更改为10分钟左右,或者如果没有收到响应,则可能永远不会触发。@RomanKiss,这30秒的时间是如何考虑的,AEG只是等待事件传递确认还是包括事件触发函数处理时间。还有一件事,我们不能从azure事件触发器函数发送HTTP响应,所以这是隐式处理的事件触发器函数的确认?在我的场景中,事件触发器函数在事件发布(T)后3秒内(T+3sec)调用,但函数本身需要大约2/3分钟才能完成处理。我仍然看到重试发生在(T+3分钟)看起来,您的订阅服务器(如ADF管道)需要30秒以上的时间,请参阅No。。。我所有通过ADF的文件都会在40秒内复制。因此,我认为ADF不是问题所在。请再次尝试读取该链接,如果AEG在30秒内未收到来自订户(ADF)的响应,则在交付过程中会发生什么情况,因此,当ADF发送后一个响应(例如~40秒)时,AEG根据调度程序时间开始重试交付,更多细节可以在该链接中找到。另外,看看AEG的交付时间指标,等等。是的,你是对的,它需要30多秒的时间来重试。是否有可能,如果重试/响应时间可以更改为10分钟左右,或者如果没有收到响应,则可能永远不会触发。@RomanKiss,这30秒的时间是如何考虑的,AEG只是等待事件传递确认还是包括事件触发函数处理时间。还有一件事,我们不能从azure事件触发器函数发送HTTP响应,所以这是隐式处理的事件触发器函数的确认?在我的场景中,事件触发器函数在事件发布(T)后3秒内(T+3sec)调用,但函数本身需要大约2/3分钟才能完成处理。我仍然看到重试发生在(T+3分钟)