我在 Cosmos DB 中有一些容器一直在变化。我需要提供一些机制来读取这些容器中的所有更改。
我正在尝试为更改馈送处理器 (CFP) 实现构建器/工厂。就我而言,我必须为不同的容器动态创建 CFP 实例。我现在如何看待解决方案 - 我需要一个监听队列的 WebJob/Console 应用程序。当另一个应用程序在 Cosmos DB 中创建新容器时,它也会向队列发送一条新消息。队列中的消息包含用于创建新 CFP 的所有信息(连接字符串、集合名称、租用容器名称等)。应用程序创建新的 CFP 并在后台的新线程中永远运行它。
这是我如何创建新 CFP 的代码
private void StartNewProcessor()
{
new List<Task>().Add(Task.Run(async () =>
{
var container = Database.GetContainer(ContainerName);
var lease = Database.GetContainer(LeaseName);
var changeFeedProcessor = container.GetChangeFeedProcessorBuilder<Item>(ProcessorName, ProcessData)
.WithLeaseContainer(lease)
.WithInstanceName(InstanceName)
.Build();
await changeFeedProcessor.StartAsync();
Console.WriteLine($"Change Feed Processor: {ProcessorName} have been started");
Console.ReadKey(true);
await changeFeedProcessor.StopAsync();
}));
}
问题是这是一个不好的方法,因为将来可能会有 100 个甚至更多的集合,所以我需要在后台创建 100 个额外的线程。我正在寻找有关架构应用程序以及如何以正确方式完成所有这些的一些想法。如果可以在一个应用程序中处理所有容器的更改,那就太好了。