Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Değişiklik akışı işlemcisi, değişiklik akışını okuma sürecini basitleştiren ve olay işlemeyi birden çok tüketiciye etkili bir şekilde dağıtan Azure Cosmos DB .NET V3 ve Java V4 SDK'larının bir parçasıdır.
Değişiklik akışı işlemcisini kullanmanın temel avantajı, değişiklik akışındaki tüm olayların en az bir kez teslimini sağlayan hataya dayanıklı tasarımıdır.
Desteklenen SDK’lar
| .NET V3 | Java | Node.js | Python |
|---|---|---|---|
| ✓ | ✓ | ✕ | ✕ |
Python ve Node.js için, değişiklik akışı işlemci kitaplığı yalnızca .NET ve Java için kullanılabildiğinden, değişiklik akışına manuel kontrol noktası yönetimiyle doğrudan erişim sağlayan değişiklik akışı çekme modeli kullanın.
Değişiklik akışı işlemcisinin bileşenleri
Değişiklik akışı işlemcisinin dört ana bileşeni vardır:
İzlenen kapsayıcı: İzlenen kapsayıcıda değişiklik akışının oluşturulduğu veriler bulunur. İzlenen kapsayıcıda yapılan eklemeler veya güncelleştirmeler, kapsayıcının değişiklik akışına yansıtılır.
Kira kapsayıcısı: Kira kapsayıcısı durum depolaması işlevi görür ve değişiklik akışının birden çok çalışan arasında işlenmesini koordine eder. Kira kapsayıcısı, izlenen kapsayıcı ile aynı hesapta veya ayrı bir hesapta depolanabilir.
İşlem örneği: İşlem örneği, değişiklikleri dinlemek için değişiklik akışı işlemcisini barındırıyor. Platforma bağlı olarak, sanal makine (VM), Kubernetes podu, Azure Uygulaması Hizmeti örneği veya gerçek bir fiziksel makine ile temsil edilebilir. İşlem örneği, bu makale boyunca örnek adı olarak adlandırılan benzersiz bir tanımlayıcıya sahiptir.
Temsilci: Temsilci, geliştirici olarak değişiklik akışı işlemcisinin okuduğu her değişiklik toplu işlemiyle ne yapmak istediğinizi tanımlayan koddur.
Değişiklik akışı işlemcisinin bu dört öğesinin birlikte nasıl çalıştığını daha fazla anlamak için aşağıdaki diyagramda bir örneğe göz atalım. İzlenen kapsayıcı öğeleri depolar ve bölüm anahtarı olarak 'City'yi kullanır. Bölüm anahtarı değerleri, öğeleri içeren aralıklara (her aralık fiziksel bir bölümü temsil eder) dağıtılır.
Diyagramda iki işlem örneği gösterilir ve değişiklik akışı işlemcisi işlem dağıtımını en üst düzeye çıkarmak için her örneğe farklı aralıklar atar. Her örneğin farklı, benzersiz bir adı vardır.
Her aralık paralel olarak okunur. Bir aralığın ilerlemesi, bir kira belgesi aracılığıyla kira kapsayıcısındaki diğer aralıklardan ayrı tutulur. Kiralamaların birleşimi, değişiklik akışı işleyicisinin geçerli durumunu temsil eder.
Değişiklik akışı işlemcisini uygulama
.NET'daki değişiklik akışı işlemcisi en son sürüm modu ve tüm sürümler ve silmeler modu için kullanılabilir. Tüm sürümler ve silmeler modu önizleme aşamasındadır ve 3.40.0-preview.0 sürümünden itibaren değişiklik akışı işlemcisine destek sağlar. Her iki mod için de giriş noktası her zaman izlenen kapsayıcıdır.
En son sürüm modunu kullanarak okumak için bir Container örnekte GetChangeFeedProcessorBuilder öğesini çağırırsınız.
/// <summary>
/// Start the Change Feed Processor to listen for changes and process them with the HandleChangesAsync implementation.
/// </summary>
private static async Task<ChangeFeedProcessor> StartChangeFeedProcessorAsync(
CosmosClient cosmosClient,
IConfiguration configuration)
{
string databaseName = configuration["SourceDatabaseName"];
string sourceContainerName = configuration["SourceContainerName"];
string leaseContainerName = configuration["LeasesContainerName"];
Container leaseContainer = cosmosClient.GetContainer(databaseName, leaseContainerName);
ChangeFeedProcessor changeFeedProcessor = cosmosClient.GetContainer(databaseName, sourceContainerName)
.GetChangeFeedProcessorBuilder<ToDoItem>(processorName: "changeFeedSample", onChangesDelegate: HandleChangesAsync)
.WithInstanceName("consoleHost")
.WithLeaseContainer(leaseContainer)
.Build();
Console.WriteLine("Starting Change Feed Processor...");
await changeFeedProcessor.StartAsync();
Console.WriteLine("Change Feed Processor started.");
return changeFeedProcessor;
}
Tüm sürümleri ve silme modunu kullanarak okumak için GetChangeFeedProcessorBuilderWithAllVersionsAndDeletes örneğinden Container'yı çağırın.
Container leaseContainer = client.GetContainer(Program.databaseName, Program.leasesContainer);
Container monitoredContainer = client.GetContainer(Program.databaseName, containerName);
ChangeFeedProcessor changeFeedProcessor = monitoredContainer
.GetChangeFeedProcessorBuilderWithAllVersionsAndDeletes<ToDoItem>(processorName: "changeFeedBasic", onChangesDelegate: Program.HandleChangesAsync)
.WithInstanceName("consoleHost")
.WithLeaseContainer(leaseContainer)
.Build();
Her iki mod için de ilk parametre, bu işlemcinin hedefini açıklayan ayrı bir addır. "İkinci isim, değişiklikleri yöneten temsilci uygulamasıdır."
En son sürüm modu için bir temsilci örneği aşağıda verilmişti:
/// <summary>
/// The delegate receives batches of changes as they are generated in the change feed and can process them.
/// </summary>
static async Task HandleChangesAsync(
ChangeFeedProcessorContext context,
IReadOnlyCollection<ToDoItem> changes,
CancellationToken cancellationToken)
{
Console.WriteLine($"Started handling changes for lease {context.LeaseToken}...");
Console.WriteLine($"Change Feed request consumed {context.Headers.RequestCharge} RU.");
// SessionToken if needed to enforce Session consistency on another client instance
Console.WriteLine($"SessionToken ${context.Headers.Session}");
// We may want to track any operation's Diagnostics that took longer than some threshold
if (context.Diagnostics.GetClientElapsedTime() > TimeSpan.FromSeconds(1))
{
Console.WriteLine($"Change Feed request took longer than expected. Diagnostics:" + context.Diagnostics.ToString());
}
foreach (ToDoItem item in changes)
{
Console.WriteLine($"Detected operation for item with id {item.id}, created at {item.creationTime}.");
// Simulate some asynchronous operation
await Task.Delay(10);
}
Console.WriteLine("Finished handling changes.");
}
Tüm sürümler ve silmeler modu için bir temsilci örneği aşağıda verilmiştir:
static async Task HandleChangesAsync(ChangeFeedProcessorContext context, IReadOnlyCollection<ChangeFeedItem<ToDoItem>> changes, CancellationToken cancellationToken)
{
Console.WriteLine($"Started handling changes for lease {context.LeaseToken}...");
Console.WriteLine($"Change Feed request consumed {context.Headers.RequestCharge} RU.");
// SessionToken if needed to enforce Session consistency on another client instance
Console.WriteLine($"SessionToken ${context.Headers.Session}");
// We may want to track any operation's Diagnostics that took longer than some threshold
if (context.Diagnostics.GetClientElapsedTime() > TimeSpan.FromSeconds(1))
{
Console.WriteLine($"Change Feed request took longer than expected. Diagnostics:" + context.Diagnostics.ToString());
}
foreach (ChangeFeedItem<ToDoItem> item in changes)
{
if (item.Metadata.OperationType == ChangeFeedOperationType.Delete)
{
Console.WriteLine($"\tDetected {item.Metadata.OperationType} operation for item.");
}
else
{
Console.WriteLine($"\tDetected {item.Metadata.OperationType} operation for item with id {item.Current.id}.");
}
// Simulate work
await Task.Delay(1);
}
}
Daha sonra WithInstanceName kullanarak işlem örneği adını veya benzersiz tanımlayıcıyı tanımlarsınız. İşlem örneği adı, dağıttığınız her işlem örneği için benzersiz ve farklı olmalıdır.
WithLeaseContainer kullanarak kira durumunu korumak için kapsayıcıyı ayarlarsınız.
Çağrı Build, StartAsync çağrısı ile başlatabileceğiniz işlemci örneğini verir.
Important
Hem besleme hem de kiralama kapsayıcıları için CosmosClient oluşturulurken ve yeni bir değişiklik akışı işlemcisi iş yükü başlatılırken:
Genel uç nokta kullanma
- Her zaman bölgesel uç nokta yerine genel uç nokta (örneğin,
contoso.documents.azure.com) belirtin.contoso-westus.documents.azure.com
ApplicationRegion veya ApplicationPreferredRegions kullanarak bölgeleri değiştirme
- Bölgeler arasındaki değişiklik akışı trafiğini yeniden yönlendirmek için
ApplicationRegionveyaApplicationPreferredRegionsözelliğini kullanın. - Değişiklik Akışı İşleyicisi, yapılandırılan uç noktaya göre kapsamlanan kira belgeleri oluşturur ve bu nedenle uç noktaların değiştirilmesi yeni bağımsız kira belgelerinin oluşturulmasına neden olur.
✅ Bunu yap - ApplicationRegion ile genel uç nokta kullanın:
CosmosClient client = new CosmosClient(
"https://contoso.documents.azure.com:443/", // Global endpoint
"<account-key>",
new CosmosClientOptions()
{
ApplicationRegion = Regions.WestUS2 // Specify region here
});
Container monitoredContainer = client.GetContainer("myDatabase", "myContainer");
Container leaseContainer = client.GetContainer("myDatabase", "leases");
✅ Bunu yapın - ApplicationPreferredRegions ile genel uç noktayı kullanın:
CosmosClient client = new CosmosClient(
"https://contoso.documents.azure.com:443/", // Global endpoint
"<account-key>",
new CosmosClientOptions()
{
ApplicationPreferredRegions = new List<string> { Regions.WestUS2, Regions.EastUS2 }
});
Container monitoredContainer = client.GetContainer("myDatabase", "myContainer");
Container leaseContainer = client.GetContainer("myDatabase", "leases");
❌ Bunu yapmayın - Bölgesel uç noktalardan kaçının:
// DON'T: Using regional endpoint will create region-scoped lease documents
CosmosClient client = new CosmosClient(
"https://contoso-westus.documents.azure.com:443/", // Regional endpoint - AVOID
"<account-key>");
Important
Temsilci yöntemlerinde zaman uyumsuz işlemlerden kaçının: Temsilci yönteminizde handleChanges() zaman uyumsuz API'ler kullanırken, değişiklik akışı işlemcisinin tüm zaman uyumsuz işlemler tamamlanmadan önce kira durumunu kontrol edebileceğini unutmayın. Bu, uygulama kurtarma sırasında sorunlarla karşılaşırsa eksik olaylara yol açabilir. Temsilcinin dönmesine izin vermeden önce zaman uyumlu işlemeyi kullanmayı veya uygun tamamlama izlemeyi uygulamayı göz önünde bulundurun.
Note
Yukarıdaki kod parçacıkları GitHub'daki örneklerden alınmıştır. en son sürüm modu veya tüm sürümler ve silmeler modu için örneği alabilirsiniz.
İşleme yaşam döngüsü
Bir konak biriminin normal yaşam döngüsü adımları şu şekildedir:
- Değişiklik akışını okuyun.
- Değişiklik yoksa önceden tanımlanmış bir süre boyunca uyku moduna geçin (Oluşturucu'da kullanılarak
WithPollIntervalözelleştirilebilir) ve 1. adıma gidin. - Değişiklikler varsa, bunları temsilciye gönderin.
- Temsilci değişiklikleri işlemeyi başarıyla tamamladığında, kira depoyu en son işlenen zaman noktasıyla güncelleştirin ve 1. adıma gidin.
Hata yönetimi
Değişiklik akışı işlemcisi kullanıcı kodu hatalarına dayanıklıdır. Temsilci uygulamanızda işlenmeyen bir özel durum varsa (4. adım), belirli bir değişiklik toplu işlemini işleyen iş parçacığı durdurulur ve sonunda yeni bir iş parçacığı oluşturulur. Yeni iş parçacığı, kiralama deposunun o bölüm anahtarı değerleri aralığı için kaydettiği en son zamanı kontrol eder. Yeni thread oradan yeniden başlatılır ve aynı değişiklik kümesini etkin bir şekilde temsilciye gönderir. Temsilciniz değişiklikleri doğru işleyene kadar bu davranış devam eder ve değişiklik akışı işlemcisinin "en az bir kez" garantisi olmasının nedeni budur.
Note
Yalnızca bir senaryoda, bir grup değişiklik yeniden denenmiyor. Hata ilk temsilci yürütmesinde gerçekleşirse, kiralama deposunun yeniden denemede kullanılacak daha önce kaydedilmiş bir durumu yoktur. Bu gibi durumlarda yeniden deneme, son toplu işlemi içerebilen veya içeremeyen ilk başlangıç yapılandırmasını kullanır.
Değişiklik akışı işlemcinizin sürekli olarak aynı değişiklik toplu işlemini yeniden denerken takılmasını önlemek için, özel bir durum oluştuğunda belgeleri hata mesajı kuyruğuna yazmak üzere temsilci kodunuza mantık eklemeniz gerekir. Bu tasarım, işlenmemiş değişiklikleri takip edebilmenizi ve gelecekteki değişiklikleri işlemeye devam edebilmenizi sağlar. Hata mesajı kuyruğu başka bir Azure Cosmos DB kapsayıcısı olabilir. Tam veri deposu önemli değildir. Yalnızca işlenmemiş değişikliklerin kalıcı olmasını istiyorsunuz.
Değişiklik akışı tahmin aracını, değişiklik akışı işlemcisi örneklerinizin değişiklik akışını okurken ilerleme durumunu izlemek için de kullanabilir veya temel alınan hataları algılamak için yaşam döngüsü bildirimlerini kullanabilirsiniz.
Zaman aşımı uyuşmazlıklarını önlemek için istemci ağ isteği zaman aşımınızın sunucu tarafı zaman aşımından daha uzun olduğundan emin olun, böylelikle işleme durmalarına yol açabilecek sorunları engelleyebilirsiniz. Varsayılan sunucu tarafı zaman aşımı 5 saniyedir. Zaman aşımıyla ilgili hataları izleyin ve yapılandırmaları uygun şekilde ayarlayın.
Yaşam döngüsü bildirimleri
Değişiklik akışı işlemcisini yaşam döngüsündeki ilgili herhangi bir olaya bağlayabilirsiniz. Bunlardan birine veya tümüne bildirim almayı seçebilirsiniz. Öneri, en azından hata bildirimini kaydetmektir:
- Bir sunucu işlemeye başlamak için kiralama aldığında bildirim almak üzere
WithLeaseAcquireNotification'yi bir işleyiciye kaydedin. - Geçerli konak kirayı bıraktığında ve işlemeyi durdurduğunda bildirim almak için
WithLeaseReleaseNotificationbir işleyici kaydedin. - Geçerli ana bilgisayar işlem sırasında bir özel durumla karşılaştığında bildirim almak için
WithErrorNotificationiçin bir işleyici kaydedin. Kaynağın kullanıcı temsilcisi (işlenmeyen özel durum) veya işlemcinin izlenen kapsayıcıya erişmeye çalıştığında karşılaştığı bir hata (örneğin, ağ sorunları) olduğunu ayırt edebilmeniz gerekir.
Yaşam döngüsü bildirimleri her iki değişiklik akışı modunda da kullanılabilir. En son sürüm modunda yaşam döngüsü bildirimleri örneği aşağıda verilmiştir:
Container.ChangeFeedMonitorLeaseAcquireDelegate onLeaseAcquiredAsync = (string leaseToken) =>
{
Console.WriteLine($"Lease {leaseToken} is acquired and will start processing");
return Task.CompletedTask;
};
Container.ChangeFeedMonitorLeaseReleaseDelegate onLeaseReleaseAsync = (string leaseToken) =>
{
Console.WriteLine($"Lease {leaseToken} is released and processing is stopped");
return Task.CompletedTask;
};
Container.ChangeFeedMonitorErrorDelegate onErrorAsync = (string LeaseToken, Exception exception) =>
{
if (exception is ChangeFeedProcessorUserException userException)
{
Console.WriteLine($"Lease {LeaseToken} processing failed with unhandled exception from user delegate {userException.InnerException}");
}
else
{
Console.WriteLine($"Lease {LeaseToken} failed with {exception}");
}
return Task.CompletedTask;
};
ChangeFeedProcessor changeFeedProcessor = monitoredContainer
.GetChangeFeedProcessorBuilder<ToDoItem>("changeFeedNotifications", handleChanges)
.WithLeaseAcquireNotification(onLeaseAcquiredAsync)
.WithLeaseReleaseNotification(onLeaseReleaseAsync)
.WithErrorNotification(onErrorAsync)
.WithInstanceName("consoleHost")
.WithLeaseContainer(leaseContainer)
.Build();
Dağıtım birimi
Tek bir değişiklik akışı işlemcisi dağıtım birimi, aynı processorName değerine ve aynı kira kapsayıcısı yapılandırmasına sahip, ancak farklı adlara sahip bir veya daha fazla işlem örneğinden oluşur. Değişiklikler için her ünitenin farklı bir iş akışına sahip olduğu ve her dağıtım biriminin bir veya daha fazla örnekten oluştuğu birçok dağıtım biriminiz olabilir.
Örneğin, kapsayıcınızda her değişiklik olduğunda dış API'yi tetikleyen bir dağıtım biriminiz olabilir. Başka bir dağıtım birimi, her değişiklik olduğunda verileri gerçek zamanlı olarak taşıyabilir. İzlenen kapsayıcınızda bir değişiklik olduğunda tüm dağıtım birimlerinize bildirim gönderilir.
Dinamik ölçeklendirme
Daha önce belirtildiği gibi, bir dağıtım birimi içinde bir veya daha fazla işlem örneğiniz olabilir. Dağıtım birimi içindeki işlem dağıtımından yararlanmak için tek önemli gereksinimler şunlardır:
- Tüm örnekler aynı kiralama kapsayıcısı yapılandırmasına sahip olmalıdır.
- Tüm örneklerin için
processorNameaynı değere sahip olması gerekir. - Her örneğin farklı bir örnek adına (
WithInstanceName) sahip olması gerekir.
Bu üç koşul geçerliyse, değişiklik akışı işlemcisi kira kapsayıcısında bulunan tüm kiraları bu dağıtım biriminin çalışan tüm örneklerine dağıtır ve eşit dağıtım algoritması kullanarak işlemi paralelleştirir. Kiralama her zaman bir instansın mülkiyetindedir, bu nedenle instans sayısı kira sayısından fazla olmamalıdır.
Örnek sayısı artabilir ve küçülebilir. Değişiklik akışı işlemcisi, yükü uygun şekilde yeniden dağıtarak dinamik olarak ayarlar.
Ayrıca, değişiklik akışı işlemcisi, kapsayıcının aktarım hızı veya depolaması artarsa kapsayıcının ölçeğini dinamik olarak ayarlayabilir. Kapsayıcınız büyüdüğünde, değişiklik akışı işlemcisi kiraları dinamik olarak artırarak ve yeni kiraları mevcut örnekler arasında dağıtarak senaryoyu şeffaf bir şekilde işler.
Başlangıç saati
Varsayılan olarak, bir değişiklik akışı işlemcisi ilk kez başlatıldığında, kira kapsayıcısını başlatır ve işleme yaşam döngüsünü başlatır. Değişiklik akışı işlemcisi ilk kez başlatılmadan önce izlenen kapsayıcıda gerçekleşen değişiklikler algılanmaz.
Önceki tarih ve saatten okuma
Belirli bir tarih ve saatte başlayan değişiklikleri okumak için değişiklik akışı işlemcisini başlatmak, DateTime oluşturucu uzantısına WithStartTime örneği geçirerek mümkündür.
Container leaseContainer = client.GetContainer(databaseId, Program.leasesContainer);
Container monitoredContainer = client.GetContainer(databaseId, Program.monitoredContainer);
ChangeFeedProcessor changeFeedProcessor = monitoredContainer
.GetChangeFeedProcessorBuilder<ToDoItem>("changeFeedTime", Program.HandleChangesAsync)
.WithInstanceName("consoleHost")
.WithLeaseContainer(leaseContainer)
.WithStartTime(particularPointInTime)
.Build();
Değişiklik akışı işlemcisi söz konusu tarih ve saat için başlatılır ve daha sonra gerçekleşen değişiklikleri okumaya başlar.
Baştan okuma
Veri geçişleri gibi diğer senaryolarda veya bir kapsayıcının geçmişinin tamamını analiz ediyorsanız, değişiklik akışını söz konusu kapsayıcının ömrünün başından itibaren okumanız gerekir. Oluşturucu uzantısında WithStartTime kullanabilirsiniz, ancak DateTime.MinValue.ToUniversalTime() değerinin en düşük UTC gösterimini oluşturan DateTime'yi şu örnekte olduğu gibi geçirin:
Container leaseContainer = client.GetContainer(databaseId, Program.leasesContainer);
Container monitoredContainer = client.GetContainer(databaseId, Program.monitoredContainer);
ChangeFeedProcessor changeFeedProcessor = monitoredContainer
.GetChangeFeedProcessorBuilder<ToDoItem>("changeFeedBeginning", Program.HandleChangesAsync)
.WithInstanceName("consoleHost")
.WithLeaseContainer(leaseContainer)
.WithStartTime(DateTime.MinValue.ToUniversalTime())
.Build();
Değişiklik akışı işlemcisi başlatılır ve kapsayıcının ömrünün başından itibaren değişiklikleri okumaya başlar.
Note
Bu özelleştirme seçenekleri yalnızca değişiklik akışı işlemcisinin başlangıç noktasını ayarlamak için çalışır. Kira kapsayıcısı ilk kez başlatıldıktan sonra, bu seçeneklerin değiştirilmesinin hiçbir etkisi olmaz.
Başlangıç noktasını özelleştirmek yalnızca en son sürüm değişiklik akışı modunda kullanılabilir. Tüm sürümleri ve silme modunu kullanırken, işlemci başlatıldığından itibaren okumaya başlamanız veya hesabınızın sürekli yedekleme saklama süresi içinde olan önceki bir kira durumundan devam etmeniz gerekir.
Akışı ve sağlanan aktarım hızını değiştirme
İzlenen kapsayıcıdaki değişiklik akışı okuma işlemleri istek birimlerini tüketir. İzlenen kapsayıcınızda kısıtlama olmadığından emin olun. Kısıtlama, işlemcilerinizde değişiklik besleme olaylarını almada gecikmeler ekler.
Kira kapsayıcısı üzerindeki işlemler (durumu güncelleştirme ve koruma) istek birimlerini kullanır. Aynı kira kapsayıcısını kullanan örnek sayısı ne kadar yüksekse, istek birimlerinin olası tüketimi de o kadar yüksektir. Kira kapsayıcınızda kısıtlama olmadığından emin olun. Hız kısıtlama, değişiklik akışı olaylarının alınmasında gecikmelere neden olur. Kısıtlama, işlemi hatta tamamen sonlandırabilir.
Kira kapsayıcısını paylaş
Kiralık konteyneri birden çok dağıtım birimi arasında paylaşabilirsiniz. Paylaşılan kira konteynerinde, her dağıtım birimi farklı bir izlenen kapsayıcıyı dinler veya processorName için farklı bir değere sahiptir. Bu yapılandırmada, her dağıtım birimi kira kapsayıcısında bağımsız bir durum korur. Sağlanan aktarım hızının tüm dağıtım birimleri için yeterli olduğundan emin olmak için kira kapsayıcısı üzerindeki istek birimi tüketimini gözden geçirin.
Gelişmiş kira yapılandırması
Değişiklik akışı işlemcisinin çalışma şeklini üç temel yapılandırma etkileyebilir. Her yapılandırma, kiralama kapsayıcısı üzerindeki istek birimi tüketimini etkiler. Değişiklik akışı işlemcisini oluştururken bu yapılandırmalardan birini ayarlayabilirsiniz, ancak bunları dikkatle kullanabilirsiniz:
- Kira Alma: Varsayılan olarak her 17 saniyede bir. Ana bilgisayar, kiralama deposunun durumunu düzenli aralıklarla denetler ve dinamik ölçeklendirme işleminde bir parça olarak kiraları almayı göz önünde bulundurur. Bu işlem, kira kapsayıcısı üzerinde bir sorgu çalıştırılarak gerçekleştirilir. Bu değerin azaltılması yeniden dengelemeyi ve kira alma işlemini hızlandırır, ancak kira kapsayıcısı üzerindeki istek birimi tüketimini artırır.
- Kira Süre Sonu: Varsayılan olarak 60 saniyedir. Bir kiralamanın başka bir konak tarafından alınmadan önce herhangi bir yenileme etkinliği olmadan var olabileceği maksimum süreyi tanımlar. Bir konak çöktüğünde, sahip olduğu kiralar bu sürenin ardından ve yapılandırılmış yenileme aralığıyla birlikte diğer konaklar tarafından alınır. Bu değerin azaltılması, ana bilgisayar çökmesinden sonra kurtarmanın daha hızlı olmasını sağlar, ancak süresinin dolma değeri hiçbir zaman yenileme aralığından daha düşük olmamalıdır.
- Kira Yenileme: Varsayılan olarak, her 13 saniyede bir. Kiraya sahip olan bir konak, kullanılacak yeni bir değişiklik olmasa bile kirayı düzenli aralıklarla yeniler. Bu işlem, kiralamada bir "Değiştir" işlemi yürütülerek gerçekleştirilir. Bu değerin azaltılması, bir konak çökmesi nedeniyle kaybolan kiraları algılamak için gereken süreyi azaltır, ancak kira kapsayıcısındaki istek birimi tüketimini artırır.
Değişiklik akışı işlemcisini nerede barındırmalı?
Değişiklik akışı işlemcisi, uzun süre çalışan işlemleri veya görevleri destekleyen herhangi bir platformda barındırılabilir. Aşağıda bazı örnekler verilmiştir:
- Azure Sanal Makineler örneğindeki bir işlem
- Azure Kubernetes Service'te arka plan işi
- Azure İşlevleri'da sunucusuz işlev
- ASP.NET barındırılan hizmet
Kiralama kapsayıcısının durumu koruması nedeniyle değişiklik akışı işleyicisi kısa süreli ortamlarda çalışabilir, ancak bu ortamların başlatılması, bildirimleri alma süresine gecikmeler ekler (her ortam başlatıldığında işleyiciyi başlatmanın aşırı yükü nedeniyle).
Rol tabanlı erişim gereksinimleri
Kimlik doğrulama mekanizması olarak Microsoft Entra Id kullanırken, kimliğin uygun izinlere sahip olduğundan emin olun:
- İzlenen kapsayıcıda:
Microsoft.DocumentDB/databaseAccounts/readMetadataMicrosoft.DocumentDB/databaseAccounts/sqlDatabases/containers/readChangeFeed
- Kira sözleşmesi konteyneri üzerinde
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/readMicrosoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/createMicrosoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/replaceMicrosoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/deleteMicrosoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/executeQuery
Daha fazla kaynak
- Azure Cosmos DB SDK'sı
- Tam örnek uygulama GitHub'da
- GitHub'da kullanım örnekleri
- Değişiklik akışı işlemcisi için Azure Cosmos DB atölye laboratuvarları
Sonraki Adımlar
Aşağıdaki makalelerde değişiklik akışı işlemcisi hakkında daha fazla bilgi edinin: