簡體   English   中英

Cosmos DB Change Feed的多個使用者

[英]Multiple consumers of Cosmos DB Change Feed

我正在使用Change Feed Processor庫(或Azure Functions Cosmos DB觸發器)來訂閱集合更新。 如何為同一個集合的供稿設置多個獨立(非競爭)消費者?

一種方法是使用多個租賃集合,例如leases1leases2等。但這有點浪費。

有一種方法可以只收取一個租賃費用嗎? (例如,通過在某處指定使用者組名稱,類似於事件中心處理器)

您可以為Azure Function Cosmos DB觸發器定義leaseCollectionPrefix 在Azure門戶中,只需單擊您的函數,然后單擊Integrate ,然后單擊“ 高級編輯器” ,這將打開您的function.json 您可以在其中定義觸發器的屬性,例如

"bindings": [
    {
      "type": "cosmosDBTrigger",
      "name": "documents",
      "direction": "in",
      "leaseCollectionName": "leases",
      "connectionStringSetting": "myDatabase_DOCUMENTDB",
      "databaseName": "myDbName",
      "collectionName": "myCollectionName",
      "createLeaseCollectionIfNotExists": false,
      "leaseCollectionPrefix": "myFunctionSpecificValue"
    }

其他設置記錄在文檔”下:

以下設置來自定義內部的“更改提要”機制和“租賃”集合的用法,可以在“高級編輯器”中的function.json中使用相應的屬性名稱進行設置:

  • leaseCollectionPrefix :設置后,它將在此函數的租賃集合中創建的租賃中添加前綴,從而有效地允許兩個單獨的Azure函數通過使用不同的前綴來共享同一租賃集合。
  • feedPollDelay :設置后,它定義了在耗盡所有當前更改之后,輪詢分區以對feed上的新更改進行輪詢之間的延遲(以毫秒為單位)。 默認值為5000(5秒)。
  • leaseAcquireInterval :設置時,它以毫秒為單位定義啟動任務以計算分區是否在已知主機實例之間平均分配的時間間隔。 默認值為13000(13秒)。
  • leaseExpirationInterval :設置后,它以毫秒為單位定義代表分區的租約進行租約的間隔。 如果未在此時間間隔內續訂租約,則將導致該租約過期,並且該分區的所有權將移至另一個實例。 默認值為60000(60秒)。
  • leaseRenewInterval :設置后,它以毫秒為單位定義實例當前所擁有的分區的所有租約的更新間隔。 默認值為17000(17秒)。
  • checkpointFrequency :設置后,它以毫秒為單位定義租借檢查點之間的間隔。 默認值始終是在成功調用Function之后。
  • maxItemsPerInvocation :設置后,它將自定義每個Function調用接收的最大項目數。

我注意到直接通過Change Feed Processor Library消費更改Feed與使用功能集成之間存在一些不一致。

當使用Change Feed Processor Library時 ,將生成如下文檔:

{
    "id": "somegraph.documents.azure.com_obtRAA==_obtRAJvr8AU=..0",
    "_etag": "\"47006e54-0000-0000-0000-59d4fdf20000\"",
    "state": 2,
    "PartitionId": "0",
    "Owner": "CosmosChangeIngestionServiceType",
    "ContinuationToken": "\"143641\"",
    "SequenceNumber": 3322,
    "_rid": "obtRAIhO1RIFAAAAAAAAAA==",
    "_self": "dbs/obtRAA==/colls/obtRAIhO1RI=/docs/obtRAIhO1RIFAAAAAAAAAA==/",
    "_attachments": "attachments/",
    "_ts": 1507130866
}

從Function生成的代碼可疑地忽略了Owner屬性,並將其設置為null。 我的理解是,“ Owner字段可以區分變更供稿的消費者,並允許多個消費者跟蹤同一租賃集合中的進度( 這顯然是理想的 )。 因此,我不確定是在設置Function綁定時是Bug還是我錯過的東西,但是似乎當前每個租約集合只能有一個Function使用者

更新:

只是每周與Cosmos團隊打過電話,問他們這個具體問題,以及諸如Table Storage之類的其他租賃存儲提供商的狀況如何。 他們應該在一天結束前與我們聯系,並作一些澄清。 當我們獲得官方信息時,我將進一步更新。

暫無
暫無

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

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