簡體   English   中英

COSMOS DB 觸發器 Azure 函數更改饋送錯誤

[英]COSMOS DB Trigger Azure Function changefeed error

我正在使用帶有 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:源集合“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-572c28d30a-service-db30a-db30a-service -9709b5068482/partitions/0a2bdc5c-471b-4acc-a093-6332c8ce1d5d/replicas/131727365611181690s,RequestStats:[6/26/2018 3:2018 3:2018 3:2018 3:2018 3:2018 3:2018 3:2018 3:2018 3:2018 3:2018 3:2018 3:2018 3:2018-2018-2018-2018 06 :rntbd://10.98.106.50:11000 /應用/ 4c8d65d7-216b-46b4-abb7-52c1a0c7123f /服務/ b3a1db8d-b82c-403E-8d89-9709b5068482 /分區/ 0a2bdc5c-471B-4acc-a093-6332c8ce1d5d /復制/ 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] 響應時間:2018-06-26T15:24:48.5014600Z,StoreReadResult:StorePhysicalAddress:rntbd://10.98.108.179:11000/apps/4c825b1020000/apps/4c825b160000服務/b3a1db8d-b82c-403e-8d89- 9709b5068482/partitions/0a2bdc5c-471b-4acc-a093-6332c8ce1d5d/replicas/131727455073557671s, LSN: 125, GlobalCommittedLsnition: 125, Validone: 請求, 驗證代碼: 錯誤, 代碼: 驗證: 部分: IsG : 1, ItemLSN: -1, ResourceType: Collection, OperationType: Read [6/26/2018 3:24:49 PM], SDK: Microsoft.Azure.Documents.Common/2.0.0.0。

我已經從 azure 門戶復制並粘貼了整個主連接字符串。 我已經多次檢查以確保找到了數據庫和集合名稱。

出於安全原因,修改了“數據庫”和“集合”。

我做錯了什么?

要使函數觸發器工作,它需要創建一個名為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

您看到的錯誤中解釋了原因:

Function1:函數“Function1”的偵聽器無法啟動。 Microsoft.Azure.WebJobs.Extensions.DocumentDB:源集合“database”(在數據庫“database”中)或租約集合“leases”(在數據庫“database”中)不存在。 在偵聽器啟動之前,這兩個集合都必須存在。 要自動創建租約集合,請將“CreateLeaseCollectionIfNotExists”設置為“true”。 Microsoft.Azure.Documents.Client:消息:{“錯誤”:[“找不到資源”]}

兩個集合都需要存在,在您的案例中稱為database的集合和稱為leases的租約集合。 正如消息所說,您可以使用CreateLeaseCollectionIfNotExists自動創建租約集合,但源集合需要存在。

如果您想了解需要租賃集合背后的原因,您可以在這里閱讀。 簡而言之,當函數讀取Change Feed 時,它需要檢查其進度,以便對單獨集合中的任何重新啟動/停止具有彈性。 此集合可以在同一個帳戶中,也可以自定義其帳戶和數據庫。

您應該檢查 Cosmos DB 連接字符串。 嘗試通過Cosmos DB Explorer打開相同的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM