Implementare lo strumento di stima dei feed di modifiche

Completato

Man mano che il processore del feed di modifiche gestisce le modifiche, agisce da puntatore basato sul tempo. Il puntatore si sposta avanti nel tempo nel feed di modifiche e invia batch di modifiche al delegato per eseguire la logica di business.

Il processore del feed di modifiche può essere potenzialmente vincolato dalle risorse fisiche dell'applicazione host. In tal caso, si presuppone quasi immediatamente la necessità di aumentare il numero di istanze del processore del feed di modifiche su più host che leggono contemporaneamente dal feed di modifiche.

Tuttavia, stabilire se è necessario aumentare il numero di istanze della soluzione può essere difficile e richiede una funzionalità di stima. Lo strumento di stima del feed di modifiche è una funzionalità collaterale per il processore che misura il numero di modifiche in sospeso che il processore deve leggere in un dato momento.

Per implementare lo strumento di stima, è prima necessario analizzare il processore. In questo esempio viene creato un processore con un contenitore di lease specifico e un delegato per gestire le modifiche.

Container sourceContainer = client.GetContainer("cosmicworks", "products");

Container leaseContainer = client.GetContainer("cosmicworks", "productslease");

ChangeFeedProcessor processor = sourceContainer.GetChangeFeedProcessorBuilder<Product>(
    processorName: "productItemProcessor",
    onChangesDelegate: changeHandlerDelegate)
    .WithInstanceName("desktopApplication")
    .WithLeaseContainer(leaseContainer)
    .Build();

Successivamente, è necessario implementare un delegato all'uso del tipo ChangesEstimationHandler per la gestione ogni volta che lo strumento di stima esegue il polling del feed di modifiche per verificare il numero di modifiche non ancora elaborate.

ChangesEstimationHandler changeEstimationDelegate = async (
    long estimation, 
    CancellationToken cancellationToken
) => {
    // Do something with the estimation
};

Infine, si compila lo strumento di stima in modo simile al processore riutilizzando lo stesso contenitore di lease.

ChangeFeedProcessor estimator = sourceContainer.GetChangeFeedEstimatorBuilder(
    processorName: "productItemEstimator",
    estimationDelegate: changeEstimationDelegate)
    .WithLeaseContainer(leaseContainer)
    .Build();