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

Bae*_*eck 6 azure azure-functions azure-eventgrid

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

\n

每个订阅都设置为在放弃事件之前最多 4 小时内尝试传送 10 次。到目前为止一切顺利,设置在大多数情况下都按预期工作 \xe2\x80\x93 。

\n

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

\n

现在回答我的问题

\n

从日志中我们可以看到各种事件未传递的原因。最常见的原因是结果缓刑。我们无法从 Microsoft 找到任何有关这实际含义的信息。

\n

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

\n

你们中的任何好心人是否知道我们如何继续解决此问题?当出现错误消息“试用期”时,Grid 和 Funciton 应用程序之间发生了什么?我们注意到的一件事是,与传递的事件数量相比,从网格到函数应用程序的连接数量相当高。\n除了事件网格之外,函数应用程序没有其他传入连接。

\n

死信消息示例

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

功能服务指标

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

统计数据

\n

Pra*_*SFT 1

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

首先,试用期是目的地不健康时的结果,事件网格仍会尝试交付。

根据该图,函数似乎达到了 100 次执行标记,然后需要一段时间才能扩展到下一个 100 次。您可以通过host.json根据每个函数执行的用途调整设置来获得更好的结果。

包括规模控制器日志可以让我们更清楚地了解横向扩展时内部发生的情况。

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