【问题标题】:Azure function using built in trigger or event grid使用内置触发器或事件网格的 Azure 函数
【发布时间】:2021-06-18 00:35:09
【问题描述】:
在Azure函数中,你可以创建一个函数来监听消息总线、blob存储等事件的某种变化...
如果您使用的是 azure 函数,并且您的目标是通过侦听诸如消息总线、blob 存储或任何其他内置触发器之类的事件来处理某些事情,那么您是否有任何理由要将事件网格放在中间层 ?即,不是直接监听 blob 存储更改的 azure 函数,而是希望 azure 函数监听正在监听 blob 存储更改事件的事件网格。
谢谢
【问题讨论】:
标签:
azure
azure-functions
azure-eventgrid
【解决方案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 之类的东西可以让它发挥作用。