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

Azure 事件网格函数触发器 - 试用

华恩
2023-03-14

我们有一个 Azure 设置,其中包含一个 Azure 事件网格主题,并且我们有一个 Azure 函数服务,其中包含大约 15 个函数,这些函数通过不同的前缀筛选器订阅该主题。Azure 函数服务设置为基于消耗的资源,应该能够根据需要进行缩放。

每个订阅都设置为在最多4小时内尝试交付10次,然后放弃活动。到目前为止一切顺利,设置大部分时间都按预期工作。

在某些情况下,对于我们未知的情况,事件网格主题似乎无法将事件传递给不同的函数。我们可以看到,我们的死信存储中充满了尚未交付的事件。

日志中,我们可以看到各种事件未交付的原因。原因通常是结果:缓刑。我们找不到Microsoft关于这实际上意味着什么的任何信息。

此外,在超过超时策略(4小时)和传递尝试策略(10次重试)之前,网格会失败并将事件添加到死信日志中。有时函数服务处于空闲状态,不会从网格接收任何事件。

你们当中是否有好人对我们如何继续进行故障排除有想法?当出现错误消息“试用期”时,Grid 和 Funciton 应用程序之间发生了什么?我们注意到的一件事是,与交付的事件数相比,从网格到函数应用的连接数非常高。除了事件网格之外,没有其他到函数应用的传入连接。

[{
   "id":"a40a1f02-5ec8-46c3-a349-aea6aaff646f",
   "eventTime":"2020-06-02T17:45:09.9710145Z",
   "eventType":"mitbalAdded",
   "dataVersion":"1",
   "metadataVersion":"1",
   "topic":"/subscriptions/XXXXXXX/resourceGroups/XXXX_STAGING/providers/Microsoft.EventGrid/topics/XXXXXstaging",
   "subject":"odl/type/mitbal/v1",
   "deadLetterReason":"TimeToLiveExceeded",
   "deliveryAttempts":6,
   "lastDeliveryOutcome":"Probation",
   "publishTime":"2020-06-02T17:45:10.1869491Z",
   "lastDeliveryAttemptTime":"2020-06-02T19:30:10.5756332Z",
   "data":"<?xml version=\"1.0\" encoding=\"utf-8\"?><Stock><Action>ADD</Action><Id>123456</Id><Store>123</Store><Shelf>1</Shelf></Stock>"
}]

  • 蓝色=连接(计数)
  • 红色=函数执行(计数)
  • 白色=请求(计数)

共有1个答案

印晋
2023-03-14

我不确定你是否已经解决了这个问题,但这里有一些对类似情况下的其他人的见解。

首先,试用是目的地不健康时的结果,在这种情况下,网格仍然会尝试交付。

根据该图,看起来函数达到了100次执行,然后过了一段时间再向外扩展到下一个100次。根据每个函数执行的目的,通过调整< code>host.json设置可以获得更好的结果。

包括缩放控制器日志可以更清楚地了解扩展时内部发生的情况。

此外,另一种选择是先将事件发送到服务总线或事件中心,然后让函数从那里运行。

 类似资料:
  • 我已经实现了一个EventGrid触发器来响应Blob存储事件,其逻辑简化如下: 外部API的响应时间不长(1秒或更短),我对主机的配置设置为默认(因此允许无限数量的并发调用)。 当同时添加多个blob(从只有2个blob开始)时,我在日志中得到了很多重复的事件(脚本正在快速地一个接一个地上传blob,中间没有等待时间)。 我觉得这可能是由于我从不承认收到事件,我不知道我是否应该在我的代码中执行此

  • 我的Azure Functions事件网格触发器没有触发。我是这么做的。 Key Vault设置为将事件报告给EventGrid系统主题 此主题由将事件传递到Azure Function的订阅订阅 函数有一个事件网格触发器(见下文,默认由门户创建): 我用谷歌搜索了一下,对于这样的入门级方案,没有更多的指导。我想的也许是授权...订阅如何触发该函数?在此过程中(通过GUI /门户配置),没有任何关

  • 在Azure function中,你可以创建一个函数来监听某个事件的变化,比如消息总线、blob存储等等... 如果您正在使用azure功能,并且您的目标是通过侦听事件(如消息总线、blob存储或任何其他内置触发器)来处理某些事情,那么您有什么理由希望将事件网格放在中间层吗?即,您不希望azure函数直接侦听blob存储更改,而是希望azure函数侦听正在侦听blob存储器更改事件的事件网格。 谢

  • 我在函数的应用程序中有一个Azure事件网格触发器。该函数通过事件订阅订阅事件网格主题。该函数运行完美,当我在函数应用程序的身份验证/授权刀片中没有配置身份验证时触发。但是当我从刀片集成B2CAD应用程序时,主题没有交付,函数也没有触发。此外,我可以在事件订阅中看到“未经授权”错误。函数应用程序内的其他HTTP触发器需要B2C流。如何授予事件网格的独占访问权限,以便在没有B2C流的情况下传递此消息

  • 我知道对于http触发函数,您可以设置context.res.status = 501,因此appInsight中的结果代码将更改为501。想知道如何为eventGrid触发的azure函数做同样的事情吗?我们想要一些自定义的结果代码,以便以后可以运行统计数据。

  • 我有一个由事件网格事件触发的Azure函数。仅当blob上载到存储帐户时,才会创建事件网格事件。 虽然由于某些原因,该函数仍然会被同一事件触发,即使它已成功处理,但它现在已部署并运行良好? 例子: 今天我查看了日志,该函数已继续执行! 错误:“Blob不存在” 代码片段: 编辑1:这仍在发生,这次有点不同。 现在,EventGrid在成功传递消息和函数运行后继续触发 我如何调试它?