首页 文章

COSMOS DB触发器Azure功能更改错误

提问于
浏览
2

我正在使用azure函数1.0.13 SDK和1.2.0 DocumentDB扩展 . 以下是我尝试运行的代码:

[FunctionName("Function1")]
        public static void Run([CosmosDBTrigger(
            databaseName: "database",
            collectionName: "collection",
            ConnectionStringSetting = "DBConn",
            LeaseCollectionName = "leases")]IReadOnlyList<Document> documents, TraceWriter log)
        {
            if (documents != null && documents.Count > 0)
            {
                log.Verbose("Documents modified " + documents.Count);
                log.Verbose("First document Id " + documents[0].Id);
            }
        }

现在,当我尝试在VS中本地调试时,我收到以下错误:

Function1:函数“Function1”的侦听器无法启动 . Microsoft.Azure.WebJobs.Extensions.DocumentDB:源集合'database'(在数据库'database'中)或租约集合'leases'(在数据库'database'中)不存在 . 两个集合必须在侦听器启动之前存在 . 要自动创建租约集合,请将“CreateLeaseCollectionIfNotExists”设置为“true” . Microsoft.Azure.Documents.Client:消息:{“错误”:[“找不到资源”]}

[6/26/2018 3:24:49 PM] ActivityId:7738cc1a-f8f6-45a2-a3c6-73d342a8d4c3,请求URI:/ apps / 4c8d65d7-216b-46b4-abb7-52c1a0c7123f / services / b3a1db8d-b82c-403e-8d89 -9709b5068482 / partitions / 0a2bdc5c-471b-4acc-a093-6332c8ce1d5d / replicas / 131727365611181690s,RequestStats:[6/26/2018 3:24:49 PM] ResponseTime:2018-06-26T15:24:48.5014600Z,StoreReadResult:StorePhysicalAddress :rntbd://10.98.106.50:11000 / apps / 4c8d65d7-216b-46b4-abb7-52c1a0c7123f / services / b3a1db8d-b82c-403e-8d89-9709b5068482 / partitions / 0a2bdc5c-471b-4acc-a093-6332c8ce1d5d / replicas / 131727365611181690s ,LSN:125,GlobalCommittedLsn:125,PartitionKeyRangeId :, IsValid:True,StatusCode:0,IsGone:False,IsNotFound:True,IsInvalidPartition:False,RequestCharge:1,ItemLSN:-1,ResourceType:Collection,OperationType:Read [6 / 26/2018 3:24:49 PM] ResponseTime:2018-06-26T15:24:48.5014600Z,StoreReadResult:StorePhysicalAddress:rntbd://10.98.108.179:11000 / apps / 4c8d65d7-216b-46b4-abb7-52c1a0c7123f /服务/ b3a1db8d-b82c-403E-8d89- 9709b5068482 / partitions / 0a2bdc5c-471b-4acc-a093-6332c8ce1d5d / replicas / 131727455073557671s,LSN:125,GlobalCommittedLsn:125,PartitionKeyRangeId :, IsValid:True,StatusCode:0,IsGone:False,IsNotFound:True,IsInvalidPartition:False,RequestCharge :1,ItemLSN:-1,ResourceType:Collection,OperationType:Read [6/26/2018 3:24:49 PM],SDK:Microsoft.Azure.Documents.Common / 2.0.0.0 .

我已经从azure portal复制并粘贴了整个主连接字符串 . 我已多次检查以确保找到数据库和集合名称 .

出于安全原因修改了“数据库”和“集合” .

我做错了什么?

2 回答

  • 1

    要使函数触发器工作,需要创建一个名为leases的集合 . 您可以自己执行此操作,或更新CosmosDBTrigger触发器以告知函数主机,如果它不存在,它可以创建它

    [CosmosDBTrigger( databaseName: "database", collectionName: "collection", ConnectionStringSetting = "DBConn", LeaseCollectionName = "leases", CreateLeaseCollectionIfNotExists = true)]

    你可以在这里看到更多信息:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-cosmosdb#trigger---c-example

  • 1

    原因在您看到的错误中解释:

    Function1:函数'Function1'的监听器无法启动 . Microsoft.Azure.WebJobs.Extensions.DocumentDB:源集合'database'(在数据库'database'中)或租约集合'leases'(在数据库'database'中)不存在 . 两个集合必须在侦听器启动之前存在 . 要自动创建租约集合,请将“CreateLeaseCollectionIfNotExists”设置为“true” . Microsoft.Azure.Documents.Client:消息:{“错误”:[“找不到资源”]}

    两个集合都需要存在,在您的情况下称为 database 的集合和名为 leases 的租用集合 . 如消息所示,您可以使用 CreateLeaseCollectionIfNotExists 自动创建租约集合,但源集合需要存在 .

    如果您想了解租约集合需要背后的原因,您可以阅读here . 简而言之,当函数读取Change Feed时,它需要检查其进度,以便对单独集合中的任何重新启动/停止具有弹性 . 此集合可以位于同一帐户中,也可以自定义其帐户和数据库 .

相关问题