ساخت برنامه های کاربردی مدرن مستلزم آن است که توسعه دهندگان به طور مداوم فناوری های جدیدتر را در طول زمان به کار گیرند. در چند سال گذشته، چندین فناوری صف با پروتکلها و SDKهای مختلف معرفی شدهاند که میتواند در طول زمان، استفاده سریع از فناوریهای جدید را برای توسعهدهندگان دشوار کند.
در این مقاله نحوه نوشتن یک رابط صف ساده را نشان خواهم داد که می تواند برای ارسال پیام با اتوبوس خدمات Azure و صف های Azure با استفاده از C# که برای انتزاع کد منبع اصلی از فناوری واقعی صف بندی طراحی شده است، استفاده شود تا کد آسان تر شود. نوشتن، و به مرور زمان با معرفی فناوریهای جدید، ارتقاء آن آسانتر است. میتوانید از این کد برای گسترش آن با سایر فناوریهای صف (مانند سری MQ و RabbitMQ) استفاده کنید و ویژگیهایی را به منطق زیربنایی اضافه کنید تا از قابلیتهای پیشرفتهتر پلتفرمهای جداگانه پشتیبانی کنید.
مفهوم
برای ساده نگه داشتن همه چیز، اجازه دهید یک رابط بسازیم که به یک برنامه اجازه می دهد یک پیام واحد را به عنوان یک رشته ارسال کند (به عنوان مثال یک سند JSON). برنامه نمونه به سادگی با استفاده از کتابخانه ای که QueueLib نامیده می شود، پیامی را به عنوان رشته ارسال می کند. این کتابخانه دارای دو کلاس (AZBus و AZQueue) خواهد بود که می توانند پیامی را در Azure Bus یا Azure Queue ارسال کنند. این کار از طریق یک رابط انجام می شود تا کد مشتری نیازی به دانستن اطلاعات داخلی پلت فرم صف مورد استفاده نداشته باشد.
![انتزاع اتوبوس خدمات Azure و صف های Azure برای ارسال پیام](http://pezhvak24.ir/dl/10kcor/cscd/article/abstracting-azure-service-bus-and-azure-queues-to-send-messages/Images/Abstracting Azure Service Bus And Azure Queues To Send Messages.jpg)
توجه داشته باشید که توانایی انتخاب کلاس برای استفاده میتواند به سادگی اجازه دادن به کد کلاینت تصمیمگیری، پیادهسازی برخی منطق اضافی بر اساس تنظیمات پیکربندی، یا حتی پیادهسازی مکانیزم Inversion of Control باشد. در این مقاله، من انتخاب میکنم منطق سادهای را اضافه کنم که بر اساس تنظیمات پیکربندی برنامه، مشخص میکند کدام کلاس نمونهسازی شود.
درباره کتابخانه QueueLib
اجازه دهید ابتدا پروژه QueueLib را با استفاده از سی شارپ به عنوان یک کتابخانه دات نت ایجاد کنیم. این پروژه شامل یک رابط است که دسترسی به اشیاء زیربنایی را انتزاعی می کند و شامل یک امضای متد واحد است: Send و دو ویژگی (ConnectionString و QueueName). توجه داشته باشید که در این مثال، ما به گزینه های سطح پیام اجازه نمی دهیم کد را ساده کنند. شما می توانید این مثال را با اجازه دادن به گزینه هایی مانند پارامتر TimeToLive گسترش دهید.
- using System;
- namespace QueueLib
- {
- public interface IQueueService
- {
- void Send(string payload);
- string ConnectionString { get; set; }
- string QueueName { get; set; }
- }
- }
در مرحله بعد کلاس AZQueue را پیاده سازی می کنیم که رابط IQueueService را پیاده سازی می کند. این کلاس به استفاده از بسته Microsoft.Azure.Storage.Queue NuGet نیاز دارد. کلاس دو ویژگی (ConnectionString و QueueName) را به همراه متد Send نمایش می دهد.
- using System;
- using Microsoft.Azure.Storage;
- using Microsoft.Azure.Storage.Queue;
- namespace QueueLib
- {
- public class AZQueue : IQueueService
- {
- public string ConnectionString { get; set; }
- public string QueueName { get; set; }
- public void Send(string payload)
- {
- CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionString);
- CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
- CloudQueue queue = queueClient.GetQueueReference(QueueName);
- CloudQueueMessage message = new CloudQueueMessage(payload);
- queue.AddMessage(message);
- }
- }
- }