簡體   English   中英

一個 Azure Function 可以監聽所有容器的 Cosmos DB Change Feed

[英]One Azure Function that can listen to Cosmos DB Change Feed for all containers

現在我有一個 Cosmos DB,它有三個不同的容器,因此我使用了三個不同的函數來監聽來自這個 Cosmos DB 的 Change Feed 事件。

將來我的容器數量將從 3 個增加到 100 個。

那么,是否有可能擁有一個 function 來監聽所有容器中的所有更改,並且可以檢測來自哪些容器更改?

簡而言之:沒有。

Azure 中的更改提要 Cosmos DB 是容器更改發生順序的持久記錄。 Azure Cosmos DB 中的更改提要支持通過偵聽 Azure Cosmos容器的任何更改來工作。

更改源可用於容器內的每個邏輯分區鍵,並且可以分布在一個或多個消費者之間以進行並行處理。

Azure Cosmos DB 中有關更改提要的文檔明確指出更改提要適用於一個特定容器。

但是,您可能可以采取不同的方法來解決您的問題。 最重要的問題是:您要解決的實際問題什么?

如果您需要使用 Function 處理 Cosmos DB 中的更改,我可以想象處理更改的邏輯對於每種類型的數據可能(將)不同。 所以對於每個容器。 如果不是這種情況,數據不必位於不同的容器中嗎?

一種選擇是創建一個計時器觸發的 Function ,它將通過拉 model 讀取更改提要 這使您能夠循環 Function 中的容器並准備處理每個容器的更改(例如,通過將信息放入隊列或使用具有扇出/扇入模式的持久函數)。

Cosmos DB 的推薦模式是擁有一個或幾個數據容器,並通過屬性值對數據進行邏輯分區,而不是分割成多個容器。 如果可能的話,出於更改提要和其他原因,有必要審查提議的設計,看看是否有辦法整合容器並避免這種痛苦。

也就是說,如果必須支持未知且不斷增長的容器數量,則可以動態實現的一種方法是通過 SDK 使用更改饋送處理器 使用GetChangeFeedProcessorBuilder實例化處理器實例時,您可以提供容器名稱作為參數。 給定所有目標容器的配置或發現列表,可以創建多個更改饋送處理器實例並並行運行。

這可以以多種方式托管 考慮使用帶有 IHostedService 的 ASP.NET 核心應用程序,並在這種情況下避免使用 Azure 函數。

暫無
暫無

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

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