【发布时间】:2020-05-08 18:51:53
【问题描述】:
CosmosDB 和 Azure Functions 有一个非常奇怪的问题。我经常删除我的数据库并在 DEV 中重新创建它。然后我重新部署函数应用程序。当我在应用程序中调用 API 并调用 CosmosDB 触发器时,我通常会看到创建了 leases 集合。这是一个典型的触发器:
[FunctionName("MyTrigger")]
public static async Task RunAsync([CosmosDBTrigger("MyDatabase", "MyContainer",
ConnectionStringSetting = "CosmosConnectionString", LeaseCollectionName = "leases",
LeaseCollectionPrefix = "MyTrigger", CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> documents,
ExecutionContext executionContext)
{
// code
}
由于某种原因,leases 集合不再被创建。我重新创建了数据库,多次重新部署了函数应用程序,但没有成功地进行 API 调用。我错过了什么?
编辑:我查看了日志,发现The lease was lost 消息中有很多Microsoft.Azure.Documents.ChangeFeedProcessor.Exceptions.LeaseLostException 异常,所以我不确定发生了什么。
EDIT2:这是我能够从日志中提取的更详细的错误消息:
“源集合 'MyContainer'(在数据库 'MyDatabase' 中)或 租约集合“租约”(在数据库“MyDatabase”中)不 存在。在侦听器启动之前,这两个集合都必须存在。到 自动创建租约集合,设置 'CreateLeaseCollectionIfNotExists' 到 'true'
请注意,CreateLeaseCollectionIfNotExists 已设置为 true。
【问题讨论】:
-
您能说明您正在使用的 Functions Cosmos DB 扩展包的版本吗?
-
另外,对于要创建的租约集合,函数运行时需要能够正确初始化,请检查您的日志以查看运行时停止初始化时是否有错误。
-
我正在使用 Microsoft.Azure.WebJobs.Extensions.CosmosDB 3.0.7 和 Microsoft.Azure.Cosmos 3.9.0-preview 和 Microsoft.NET.Sdk.Functions 3.0.3。
-
在哪里可以找到函数运行时日志?
-
它们会出现在 App Insights(如果您正在使用)docs.microsoft.com/en-us/azure/azure-functions/…。此外,如果您在 Azure 门户上浏览该功能,我相信屏幕底部有一个日志上拉选项。您是否尝试过在本地运行函数来调试任何初始化错误?
标签: azure azure-functions azure-cosmosdb azure-cosmosdb-changefeed