ویرگول
ورودثبت نام
غلامرضا سفال زاده
غلامرضا سفال زاده
غلامرضا سفال زاده
غلامرضا سفال زاده
خواندن ۲ دقیقه·۱۷ روز پیش

آموزش Wolverine در دات نت - قسمت 1 - مقدمه


معرفی

در دنیای توسعه نرم‌افزارهای مدرن، معماری‌های مبتنی بر پیام‌رسانی (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

منظور از «سیستم پیام‌رسانی کامل و غیرهمزمان» چیست؟

  1. ارسال پیام بدون انتظار برای پاسخ

در معماری‌های غیرهمزمان، وقتی یک بخش از برنامه پیامی ارسال می‌کند، منتظر اجرای آن در همان لحظه نمی‌ماند. این کار با Queue داخلی یا ابزارهایی مثل RabbitMQ انجام می‌شود. این یعنی:

  • Thread بلاک نمی‌شود؛

  • کاربر معطل نمی‌ماند؛

  • سیستم می‌تواند هزاران پیام را هم‌زمان مدیریت کند؛

  1. مدیریت صف پیام‌ها

ولورین می‌تواند پیام‌ها را در صف قرار دهد (یک Message Bus واقعی در اختیارتان است، نه فقط یک Mediator ساده) تا :

  • در زمان مناسب پردازش شوند؛

  • اگر سیستم شلوغ بود، یا خطایی رخ داد ، پیام‌ها از بین نروند؛

  • اگر خطایی رخ داد، سیستم دوباره برای پردازش پیام تلاش (Retry) کند؛

  1. پردازش پیام‌ها در پس‌زمینه [5]

ولورین Workerهای داخلی دارد که پیام‌ها را در پس‌زمینه پردازش می‌کنند.  

  1. قابلیت ارسال پیام بین میکرو سرویس‌ها [6]

ولورین فقط برای داخل یک برنامه نیست. می‌تواند پیام‌ها را با بهره گیری از ابزارهای ثانویه بیرونی بین میکرو سرویس‌ها ارسال و دریافت کند؛ ابزارهایی مانند:

  • با RabbitMQ 

  • با Azure Service Bus

  • با TCP داخلی خودش 

  1. قابلیت‌های کامل یک Message Bus حرفه‌ای

ولورین امکاناتی دارد که معمولاً فقط در ابزارهای بزرگی مانند MassTransit یا NServiceBus می‌بینید. به عنوان مثال :

  • Scheduled Messages (ارسال پیام در آینده) 

  • Durable Messaging (پیام‌ها از بین نمی‌روند) 

  • Error Handling و Retry Policies 

  • Dead Letter Queue  (مدیریت مسیج های دارای خطا یا غیرقابل پردازش)

  • Tracing و Observability 

  • Saga-like State Management

چرا Wolverine مهم است؟

در پروژه‌های واقعی، مدیریت پیام‌ها، اجرای دستورات، هماهنگی بین میکروسرویس‌ها و ساخت معماری‌های 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] کدهای تکرای و خسته کننده ای که تقریبا در همه پروژه ها باید بنویسید اما ارزش افزوده ای ایجاد نمیکنند. ولورین سعی میکند همه چیز را خودکار کند.

message brokerدات نتcqrs
۰
۰
غلامرضا سفال زاده
غلامرضا سفال زاده
شاید از این پست‌ها خوشتان بیاید