[英]Not able to run Cosmos DB Change Feed Trigger Azure Function locally
[英]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.