COSMOS DB触发器Azure函数changefeed错误

时间:2018-06-26 15:29:56

标签: azure azure-functions azure-cosmosdb azure-functions-core-tools

我正在使用具有1.2.0 DocumentDB扩展名的Azure函数1.0.13 SDK。以下是我尝试运行的代码:

  [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:源集合“数据库”(在数据库“数据库”中)或租约集合“租赁”(在数据库“数据库”中)都不存在。这两个集合必须在侦听器启动之前存在。要自动创建租赁集合,请将“ 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]响应时间: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,PartitionKeyRange,True: :False,IsNotFound:True,IsInvalidPartition:False,RequestCharge:1,ItemLSN:-1,ResourceType:集合,OperationType:读取 [6/26/2018 3:24:49 PM]响应时间:2018-06-26T15:24:48.5014600Z,StoreReadResult:StorePhysicalAddress:rntbd://10.98.108.179:11000 / apps / 4c8d65d7-216b-46b4-abb7- 52c1a0c7123f / services / b3a1db8d-b82c-403e-8d89-9709b5068482 / partitions / 0a2bdc5c-471b-4acc-a093-6332c8ce1d5d / replicas / 131727455073557671s,LSN:125,GlobalCommittedLsn:125,PartitionKeyRange,True: :False,IsNotFound:True,IsInvalidPartition:False,RequestCharge:1,ItemLSN:-1,ResourceType:集合,OperationType:读取 [6/26/2018 3:24:49 PM],SDK:Microsoft.Azure.Documents.Common / 2.0.0.0。

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

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

我做错了什么?

3 个答案:

答案 0 :(得分:1)

为使函数触发器起作用,它需要创建一个称为“租约”的集合。您可以自己执行此操作,也可以更新CosmosDBTrigger触发器以告知函数主机可以使它(如果不存在的话)

i = '{a:b,c:d},{e:f,g:h}' [e.strip('{}') for e in i.split('},{')] # ['a:b,c:d', 'e:f,g:h']

您可以在此处查看更多信息:https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-cosmosdb#trigger---c-example

答案 1 :(得分:1)

在您看到的错误中说明了原因:

  

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

两个集合都必须存在,在您的情况下,集合称为database,而租约集合称为leases。如消息所示,您可以使用CreateLeaseCollectionIfNotExists自动创建租赁集合,但是源集合必须存在。

如果您想了解需要租赁集合的原因,可以阅读here。简而言之,当函数读取Change Feed时,它需要检查其进度,以适应单独集合中的任何重新启动/停止。该集合可以在同一帐户中,也可以自定义其帐户和数据库。

答案 2 :(得分:0)

您应该检查Cosmos DB连接字符串。尝试通过Cosmos DB Explorer

打开