Azure Function App Cosmos DB 触发连接断开

Azure Function App Cosmos DB trigger connection drop

我正在使用带有 cosmos DB 触发器的函数应用程序,当 运行 在本地时,行为非常奇怪,因为我停止随机接收事件,就像与 Lease 集合的连接断开一样。我收到一条错误消息,指出对 Blob 存储的读取操作失败,但不确定这是否相关。这是错误:

There was an error performing a read operation on the Blob Storage Secret Repository. 
Please ensure the 'AzureWebJobsStorage' connection string is valid

我是运行函数应用,代码如下:func host start --cors * --verbose

这是我可以在控制台中看到的 CosmosDBOptions 对象:

[2021-02-09T16:17:58.305Z] CosmosDBOptions
[2021-02-09T16:17:58.307Z] {
[2021-02-09T16:17:58.307Z]   "ConnectionMode": null,
[2021-02-09T16:17:58.308Z]   "Protocol": null,
[2021-02-09T16:17:58.309Z]   "LeaseOptions": {
[2021-02-09T16:17:58.310Z]     "CheckpointFrequency": {
[2021-02-09T16:17:58.310Z]       "ExplicitCheckpoint": false,
[2021-02-09T16:17:58.311Z]       "ProcessedDocumentCount": null,
[2021-02-09T16:17:58.311Z]       "TimeInterval": null
[2021-02-09T16:17:58.312Z]     },
[2021-02-09T16:17:58.313Z]     "FeedPollDelay": "00:00:05",
[2021-02-09T16:17:58.313Z]     "IsAutoCheckpointEnabled": true,
[2021-02-09T16:17:58.314Z]     "LeaseAcquireInterval": "00:00:13",
[2021-02-09T16:17:58.314Z]     "LeaseExpirationInterval": "00:01:00",
[2021-02-09T16:17:58.315Z]     "LeasePrefix": null,
[2021-02-09T16:17:58.316Z]     "LeaseRenewInterval": "00:00:17"
[2021-02-09T16:17:58.316Z]   }
[2021-02-09T16:17:58.323Z] }

和我的 host.json 文件:

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[1.*, 2.0.0)"
  }
}

最后,自从我添加了一个共享文件夹后,这个问题就开始了,不确定它是否相关但它真的很烦人,删除租约集合暂时解决了这个问题但是它花费了很多时间和所有其他运行函数中断,因为我清理了所有集合。

TLDR;使用 CosmosDB 模拟器进行本地开发解决了这个问题,因为您不会有两个函数指向同一个租约集合。

有两点很重要:

  1. 如果您在 Azure 上部署了一个 Azure Functions,并且在您的计算机本地部署了一个 运行,并且相同的租用配置侦听同一受监控集合中的变化,那么这些将表现为同一部署的多个实例,更改将传递给一个或另一个,您可能会在 Azure 中的一个 运行 上遇到“事件丢失”。这记录在 https://docs.microsoft.com/en-us/azure/cosmos-db/troubleshoot-changefeed-functions#some-changes-are-missing-in-my-trigger. If you want to have 2 independent Functions listening for changes in the same monitored collection, sharing the same lease collection, you need to use the LeaseCollectionPrefix configuration https://docs.microsoft.com/en-us/azure/cosmos-db/how-to-create-multiple-cosmos-db-triggers
  2. 您在本地看到的错误可能与没有 Azure 存储模拟器 运行 或没有在本地配置 AzureWebJobsStorage 配置以使用它有关。 Azure Functions 运行时(无论 Cosmos DB 触发器如何)需要一个存储帐户。您可以使用 UseDevelopmentStorage=true 作为本地存储模拟器。