ترحيل من مكتبة معالج موجز التغيير إلى Azure Cosmos DB .NET V3 SDK
ينطبق على: NoSQL
توضح هذه المقالة الخطوات المطلوبة لترحيل التعليمات البرمجية لتطبيق موجود يستخدم مكتبة معالج موجز التغيير إلى ميزة موجز التغيير في أحدث إصدار من عدة تطوير البرامج .NET (يشار إليها أيضاً باسم .NET V3 SDK).
تغييرات التعليمات البرمجية المطلوبة
يشمل .NET V3 SDK عدة تغييرات فاصلة، وفيما يلي الخطوات الرئيسية لترحيل التطبيق لديك:
- تحويل
DocumentCollectionInfo
المثيلات إلىContainer
مراجع للحاويات المراقبة والمؤجرة. - يجب تحديث التخصيصات التي تستخدم
WithProcessorOptions
لكي تستخدمWithLeaseConfiguration
وWithPollInterval
للفترات الزمنية، وWithStartTime
لوقت البدء، وWithMaxItems
لتحديد الحد الأقصى لعدد العناصر. - قم بتعيين
processorName
علىGetChangeFeedProcessorBuilder
لمطابقة القيمة التي تم تكوينها علىChangeFeedProcessorOptions.LeasePrefix
، أو استخدامstring.Empty
بدلاً من ذلك. - لم يعد يتم تسليم التغييرات باعتبارها
IReadOnlyList<Document>
، وبدلاً من ذلك، فهوIReadOnlyCollection<T>
يكون فيهT
نوعاً تحتاج إلى تعريفه، ولم يعد هناك فئة عنصر أساسي. - لمعالجة التغييرات، لم تعد بحاجة إلى تطبيق
IChangeFeedObserver
، وبدلاً من ذلك، تحتاج إلى تحديد مفوض. يمكن أن يكون المفوض وظيفة ثابتة أو، إذا كنت بحاجة إلى المحافظة على الحالة عبر عمليات التنفيذ، يمكنك إنشاء الفئة الخاصة بك وتمرير أسلوب مثيل كمفوض.
على سبيل المثال، إذا كانت التعليمات البرمجية الأصلية لإنشاء معالج موجز التغيير تبدو كما يلي:
ChangeFeedProcessorLibrary.DocumentCollectionInfo monitoredCollectionInfo = new ChangeFeedProcessorLibrary.DocumentCollectionInfo()
{
DatabaseName = databaseId,
CollectionName = Program.monitoredContainer,
Uri = new Uri(configuration["EndPointUrl"]),
MasterKey = configuration["AuthorizationKey"]
};
ChangeFeedProcessorLibrary.DocumentCollectionInfo leaseCollectionInfo = new ChangeFeedProcessorLibrary.DocumentCollectionInfo()
{
DatabaseName = databaseId,
CollectionName = Program.leasesContainer,
Uri = new Uri(configuration["EndPointUrl"]),
MasterKey = configuration["AuthorizationKey"]
};
ChangeFeedProcessorLibrary.ChangeFeedProcessorBuilder builder = new ChangeFeedProcessorLibrary.ChangeFeedProcessorBuilder();
var oldChangeFeedProcessor = await builder
.WithHostName("consoleHost")
.WithProcessorOptions(new ChangeFeedProcessorLibrary.ChangeFeedProcessorOptions
{
StartFromBeginning = true,
LeasePrefix = "MyLeasePrefix",
MaxItemCount = 10,
FeedPollDelay = TimeSpan.FromSeconds(1)
})
.WithFeedCollection(monitoredCollectionInfo)
.WithLeaseCollection(leaseCollectionInfo)
.WithObserver<ChangeFeedObserver>()
.BuildAsync();
ستبدو التعليمة البرمجية التي تم ترحيلها كما يلي:
Container leaseContainer = client.GetContainer(databaseId, Program.leasesContainer);
Container monitoredContainer = client.GetContainer(databaseId, Program.monitoredContainer);
ChangeFeedProcessor changeFeedProcessor = monitoredContainer
.GetChangeFeedProcessorBuilder<ToDoItem>("MyLeasePrefix", Program.HandleChangesAsync)
.WithInstanceName("consoleHost")
.WithLeaseContainer(leaseContainer)
.WithMaxItems(10)
.WithPollInterval(TimeSpan.FromSeconds(1))
.WithStartTime(DateTime.MinValue.ToUniversalTime())
.Build();
بالنسبة للمفوض، يمكن أن يكون لديك أسلوب ثابت لتلقي الأحداث. إذا كنت تستهلك معلومات من IChangeFeedObserverContext
يمكنك ترحيل لاستخدام ChangeFeedProcessorContext
:
ChangeFeedProcessorContext.LeaseToken
يمكن استخدامها بدلاً منIChangeFeedObserverContext.PartitionKeyRangeId
ChangeFeedProcessorContext.Headers
يمكن استخدامها بدلاً منIChangeFeedObserverContext.FeedResponse
ChangeFeedProcessorContext.Diagnostics
يحتوي على معلومات مفصلة حول زمن انتقال الطلب لاستكشاف الأخطاء وإصلاحها
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($"\tDetected operation for item with id {item.id}, created at {item.creationTime}.");
// Simulate work
await Task.Delay(1);
}
}
الأحداث الصحية وإمكانية الملاحظة
إذا كنت تستخدم IHealthMonitor
سابقا أو كنت تستفيد IChangeFeedObserver.OpenAsync
من و IChangeFeedObserver.CloseAsync
، فاستخدم واجهة برمجة تطبيقات الإعلامات.
IChangeFeedObserver.OpenAsync
يمكن استبداله بWithLeaseAcquireNotification
.IChangeFeedObserver.CloseAsync
يمكن استبداله بWithLeaseReleaseNotification
.IHealthMonitor.InspectAsync
يمكن استبداله بWithErrorNotification
.
حاوية الحالة والتأجير
على غرار مكتبة معالج موجز التغيير، تستخدم ميزة موجز التغيير في NET V3 SDK حاوية تأجير لتخزين الحالة. ومع ذلك، فإن المخططات مختلفة.
سيقوم معالج موجز التغيير SDK V3 بالكشف عن أي حالة مكتبة قديمة وترحيلها إلى المخطط الجديد تلقائياً عند تنفيذ التعليمات البرمجية للتطبيق الذي تم ترحيله لأول مرة.
يمكنك إيقاف التطبيق بأمان باستخدام التعليمات البرمجية القديمة وترحيل التعليمات البرمجية إلى الإصدار الجديد وبدء تشغيل التطبيق الذي تم ترحيله وسيتم جمع أي تغييرات حدثت أثناء إيقاف التطبيق ومعالجتها بواسطة الإصدار الجديد.
الموارد الإضافية
الخطوات التالية
يمكنك الآن المتابعة لمعرفة المزيد حول معالج موجز التغيير في المقالات التالية:
- نظرة عامة على معالج موجز التغيير
- استخدام أداة تقدير موجز التغيير
- تغيير وقت بدء معالج الموجز
- هل تحاول القيام بتخطيط السعة للترحيل إلى Azure Cosmos DB؟
- في حال كان كل ما تعرفه هو عدد vcores والخوادم في مجموعة قاعدة البيانات الحالية، فاقرأ عن تقدير وحدات الطلب باستخدام vCores أو vCPUs
- إذا كان كل ما تعرفه هو عدد vcores والخوادم الموجودة في مجموعة قاعدة البيانات، اقرأ عن تقدير وحدات الطلب باستخدام vCores أو vCPUs