
در دنیای توسعه نرمافزارهای مدرن، معماریهای مبتنی بر پیامرسانی (Messaging) و الگوهای CQRS [1] بیش از هر زمان دیگری اهمیت پیدا کردهاند. برنامهها باید مقیاسپذیر، قابلاعتماد و قابلتوسعه باشند؛ و این دقیقاً همان جایی است که ابزاری مانند Wolverine و مسیج بروکری [2] مانند RabbitMQ وارد میدان میشوند.
Wolverine یک «ابزار برای اجرای دستورات و مدیریت پیامها»[3] در اپلیکیشنهای دات نت است. این کتابخانه توسط تیم JasperFx توسعه داده شده و هدفش سادهسازی معماریهای پیچیده، کاهش وابستگی به فریمورکهای سنگین و ارائه یک تجربه توسعه تمیز، سریع و قابلفهم است. میتواند بهعنوان یک Mediator داخلی، یک Message Bus محلی یا حتی یک «سیستم پیامرسانی کامل و غیرهمزمان عمل» کند. این ابزار تلاش میکند بدون تحمیل ساختارهای پیچیده، توسعهدهنده را قادر سازد تا با کمترین کد، بیشترین قابلیت را پیادهسازی کند.
اجرای بسیار سریع و بهینهی دستورات
پشتیبانی از Messaging درونبرنامهای (In-Process)
پشتیبانی از Messaging بین میکرو سرویسها با ابزارهایی مثل RabbitMQ
قابلیت استفاده بهعنوان جایگزین Mediator
یکپارچگی کامل با NET Generic Host. ، Logging، DI و سایر اجزای استاندارد داتنت
امکان استفاده از آن بهعنوان Endpoint Provider در ASP.NET Core
ارسال پیام بدون انتظار برای پاسخ
در معماریهای غیرهمزمان، وقتی یک بخش از برنامه پیامی ارسال میکند، منتظر اجرای آن در همان لحظه نمیماند. این کار با Queue داخلی یا ابزارهایی مثل RabbitMQ انجام میشود. این یعنی:
Thread بلاک نمیشود؛
کاربر معطل نمیماند؛
سیستم میتواند هزاران پیام را همزمان مدیریت کند؛
مدیریت صف پیامها
ولورین میتواند پیامها را در صف قرار دهد (یک Message Bus واقعی در اختیارتان است، نه فقط یک Mediator ساده) تا :
در زمان مناسب پردازش شوند؛
اگر سیستم شلوغ بود، یا خطایی رخ داد ، پیامها از بین نروند؛
اگر خطایی رخ داد، سیستم دوباره برای پردازش پیام تلاش (Retry) کند؛
پردازش پیامها در پسزمینه [5]
ولورین Workerهای داخلی دارد که پیامها را در پسزمینه پردازش میکنند.
قابلیت ارسال پیام بین میکرو سرویسها [6]
ولورین فقط برای داخل یک برنامه نیست. میتواند پیامها را با بهره گیری از ابزارهای ثانویه بیرونی بین میکرو سرویسها ارسال و دریافت کند؛ ابزارهایی مانند:
با RabbitMQ
با Azure Service Bus
با TCP داخلی خودش
قابلیتهای کامل یک Message Bus حرفهای
ولورین امکاناتی دارد که معمولاً فقط در ابزارهای بزرگی مانند MassTransit یا NServiceBus میبینید. به عنوان مثال :
Scheduled Messages (ارسال پیام در آینده)
Durable Messaging (پیامها از بین نمیروند)
Error Handling و Retry Policies
Dead Letter Queue (مدیریت مسیج های دارای خطا یا غیرقابل پردازش)
Tracing و Observability
Saga-like State Management
در پروژههای واقعی، مدیریت پیامها، اجرای دستورات، هماهنگی بین میکروسرویسها و ساخت معماریهای Event-Driven معمولاً نیازمند چندین کتابخانه مختلف است. ولورین این مشکل را حل میکند:
یک ابزار واحد برای Command Handling، Messaging و Scheduling
کدنویسی تمیز و بدون Boilerplate [7]
سرعت بالا و معماری ساده
مناسب برای پروژههای کوچک تا Enterprise
[1] CQRS: Command Query Responsibility Segregation.
[2] Message Broker
[3] Command & Message Handling Framework
[4] Asynchronous Messaging
[5] Background Workers
[6]Distributed Messaging
[7] کدهای تکرای و خسته کننده ای که تقریبا در همه پروژه ها باید بنویسید اما ارزش افزوده ای ایجاد نمیکنند. ولورین سعی میکند همه چیز را خودکار کند.