在Azure function中,你可以创建一个函数来监听某个事件的变化,比如消息总线、blob存储等等...
如果您正在使用azure功能,并且您的目标是通过侦听事件(如消息总线、blob存储或任何其他内置触发器)来处理某些事情,那么您有什么理由希望将事件网格放在中间层吗?即,您不希望azure函数直接侦听blob存储更改,而是希望azure函数侦听正在侦听blob存储器更改事件的事件网格。
谢谢
是的,这取决于场景。
这取决于你的需求是什么。以存储和blob为例,如果您只需要在创建blob时得到通知,匹配您用< code>BlobTrigger配置的任何路径、名称、扩展名和其他过滤器,那么使用EventGrid就没有意义。
但是,如果您需要配置一个Function以同时使用多个Storage帐户,需要BlobTrigger
不支持的高级过滤,或在特殊事件时触发(例如,当创建、删除或重命名目录时),那么您需要EventGrid。
以下是一个略微(但不太牵强)的例子:
考虑一下,每当在存储1、2、3... n中创建blob时,您都需要一个函数来触发。事实上,它可能是任意数量的不同存储,并且会随着时间的推移而变化。现在,您需要为每个存储定义一个BlobTrigger
的函数,或者一个单独的函数,定义了许多BlobTrigger
,并且在您的应用程序设置中配置了许多连接字符串。这显然不是很方便维护,因为您必须在每次需要触发任意数量的存储以进行更改时更改函数(主要是在添加新存储时)。
事件网格来救援。现在,您可以使用订阅(每个存储一个订阅)来管理触发函数的内容,而无需更改函数的代码。当然,您需要一种不同的方法来与存储进行通信,而不是通常的连接字符串。您可能需要类似 StorageManagementClient 的东西
。当然,你会失去自动 blob 绑定。这可以通过实现自己的扩展(自定义绑定)来规避。我已经写了一个答案,涵盖了如何做到这一点(尽管它是用于将数组/列表绑定到HttpTrigger
)。
您还可以使用EventGrid自动化订阅管理(或者,通知一些代码来创建订阅)。示例:所有存储都集中在一个资源组中。EventGrid支持在资源组中发生变化时触发,使用EventGrid订阅的高级过滤器,您应该能够将其配置为仅在创建存储帐户时触发...或者删除。
无论如何,这确实是一个需要的问题。而上面的例子可能是牵强的。但也有一些用例是函数本身不支持的,像EventGrid这样的东西可以让它工作。
我已经实现了一个EventGrid触发器来响应Blob存储事件,其逻辑简化如下: 外部API的响应时间不长(1秒或更短),我对主机的配置设置为默认(因此允许无限数量的并发调用)。 当同时添加多个blob(从只有2个blob开始)时,我在日志中得到了很多重复的事件(脚本正在快速地一个接一个地上传blob,中间没有等待时间)。 我觉得这可能是由于我从不承认收到事件,我不知道我是否应该在我的代码中执行此
我们有一个 Azure 设置,其中包含一个 Azure 事件网格主题,并且我们有一个 Azure 函数服务,其中包含大约 15 个函数,这些函数通过不同的前缀筛选器订阅该主题。Azure 函数服务设置为基于消耗的资源,应该能够根据需要进行缩放。 每个订阅都设置为在最多4小时内尝试交付10次,然后放弃活动。到目前为止一切顺利,设置大部分时间都按预期工作。 在某些情况下,对于我们未知的情况,事件网格主
我的Azure Functions事件网格触发器没有触发。我是这么做的。 Key Vault设置为将事件报告给EventGrid系统主题 此主题由将事件传递到Azure Function的订阅订阅 函数有一个事件网格触发器(见下文,默认由门户创建): 我用谷歌搜索了一下,对于这样的入门级方案,没有更多的指导。我想的也许是授权...订阅如何触发该函数?在此过程中(通过GUI /门户配置),没有任何关
我在函数的应用程序中有一个Azure事件网格触发器。该函数通过事件订阅订阅事件网格主题。该函数运行完美,当我在函数应用程序的身份验证/授权刀片中没有配置身份验证时触发。但是当我从刀片集成B2CAD应用程序时,主题没有交付,函数也没有触发。此外,我可以在事件订阅中看到“未经授权”错误。函数应用程序内的其他HTTP触发器需要B2C流。如何授予事件网格的独占访问权限,以便在没有B2C流的情况下传递此消息
我正在寻找合适的资源/教程,可以帮助我开发和部署事件网格触发器,该触发器将等待图像上传到blob容器,使用python处理该图像,然后将结果保存在另一个blob容器中。我发现了许多单独的文档,它们不一定在逻辑上指导我使用Azure Portal和VSCode进行开发和部署,就像从头到尾的一步一步的演练,介绍了实现这一点的所有步骤。 任何指导将不胜感激。
我知道对于http触发函数,您可以设置context.res.status = 501,因此appInsight中的结果代码将更改为501。想知道如何为eventGrid触发的azure函数做同样的事情吗?我们想要一些自定义的结果代码,以便以后可以运行统计数据。