使用内置触发器或事件网格的 Azure 函数

Posted

技术标签:

【中文标题】使用内置触发器或事件网格的 Azure 函数【英文标题】:Azure function using built in trigger or event grid 【发布时间】:2021-06-18 00:35:09 【问题描述】:

在Azure函数中,你可以创建一个函数来监听消息总线、blob存储等事件的某种变化...

如果您使用的是 azure 函数,并且您的目标是通过侦听诸如消息总线、blob 存储或任何其他内置触发器之类的事件来处理某些事情,那么您是否有任何理由要将事件网格放在中间层 ?即,不是直接监听 blob 存储更改的 azure 函数,而是希望 azure 函数监听正在监听 blob 存储更改事件的事件网格。

谢谢

【问题讨论】:

Azure 事件网格是一种 Pub/Sub 事件模型,用于以 PUSH 方式快速可靠地将您感兴趣的事件传递给订阅者。换句话说,没有听众。与 BlobTrigger 函数相反,其中底层逻辑基于定期容器轮询以扫描其差异。有关 BlobTrigger 限制及其替代方案的更多详细信息:docs.microsoft.com/en-us/azure/azure-functions/… 【参考方案1】:

这取决于您的需求。使用存储和 blob,如果您只需要在创建 blob 时收到通知,匹配您使用 BlobTrigger 配置的任何路径、名称、扩展名和其他过滤器,那么使用 EventGrid 没有意义。

但是如果您需要配置一个函数以同时使用多个存储帐户,需要BlobTrigger 不支持的高级过滤,或者触发特殊事件(例如,当创建、删除或重命名目录时) ,那么你需要 EventGrid。

一个稍微(但不是太牵强)的例子可能如下:

假设您需要一个函数来在存储 1、2、3 ... n 中创建 blob 时触发。事实上,它可以是任意数量的不同存储,并且会随着时间而变化。现在,您需要为每个存储设置一个函数,定义一个 BlobTrigger,或者一个函数,定义多个 BlobTrigger,并在应用程序设置中配置大量连接字符串。这显然不是很方便维护,因为每次需要触发更改的任意数量的存储时都必须更改函数(主要是添加新存储时)。

EventGrid 来救援。您现在可以通过订阅管理触发函数的内容,每个存储一个,而无需更改函数的代码。您当然需要一种不同的方法来与存储进行通信,而不是通常的连接字符串;你可能需要像StorageManagementClient 这样的东西。当然,您会丢失自动 blob 绑定。这可以通过实现您自己的扩展(自定义绑定)来规避。 I've already written an answer 涵盖了如何做到这一点(尽管它是将数组/列表绑定到 HttpTrigger)。

您还可以使用 EventGrid 自动化订阅管理(或者更确切地说,通知一些代码来创建订阅)。示例:所有存储都集中在一个资源组中。 EventGrid 支持在资源组中的某些内容发生更改时触发,并且使用 EventGrid 订阅的高级过滤器,您应该能够将其配置为仅在创建存储帐户时触发...或删除。

无论如何,这确实是一个需要的问题。上面的例子可能很牵强。但是有些用例是 Functions 本身不支持的,而 EventGrid 之类的东西可以让它发挥作用。

【讨论】:

【参考方案2】:

是的,这取决于场景。

【讨论】:

以上是关于使用内置触发器或事件网格的 Azure 函数的主要内容,如果未能解决你的问题,请参考以下文章

用于文件共享的 Azure 触发功能

“排队”的 Azure 事件网格 Blob 触发器事件消息存储在哪里,如何清除它们?

创建事件网格订阅的正确端点格式是啥

Azure 事件中心 Event Grid(事件网格)+Azure Functions处理IOT Hub中的消息

来自另一个帐户中的事件中心的 Azure 函数触发器

我们可以使用 Azure 存储队列作为事件源吗?