سوال اول اینه که EventBus اصلا چیه؟
در جواب میشه گفت که EventBus مکانیزمیه که بهتون این امکان رو میده که کامپوننت های مختلف بتونن باهم ارتباط برقرار کنند بدون اینکه اطلاعی از همدیگه داشته باشند.
بدین صورت که یک کامپوننت میتونه یک Event روی EventBus ارسال کنه بدون اینکه اطلاعی از این داشته باشه که چه کسی این Event رو دریافت میکنه یا اینکه چه تعدادی کامپوننت دیگه این Event رو دریافت می کنن.
اینجوری میشه که این کامپوننت ها میتونن باهم در ارتباط باشن بدون اینکه به هم وابستگی داشته باشند و اصطلاحا Depend هم نباشند.
سوالی که ممکنه براتون پیش بیاد اینه که Component چیه؟
کامپوننت(Component) در اینجا میتونه هرچی باشه اما اغلب آبجکت هایی هستند که میتونن Event ارسال یا دریافت کنن.
و اینکه Event چیه؟
وقایع یا Eventها اتفاقاتی هستند که داخل سیستم اتفاق میفتند و میشه گفت پیام هایی هستند که بین Componentها رد و بدل میشه.
مثلا یک مثال تو سیستم فروشگاهی بزنیم، اینکه مثلا تو کامپوننت سفارش یک کالا بعد اینکه هزینه آن پرداخت و خریداری شد، درنتیجه یک محصول از تعداد محصولامون کم میشه و باید این تغییرات در کامپوننت یا سیستم انبارمون هم ثبت بشه. این پروسه میتونه در قالب ارسال یک Event باشه که توسط کامپوننت سفارش ارسال میشه و کامپوننت انبار هم اونو دریافت میکنه و تغییرات مدنظر اتفاق میفته.
اینجوری ما تونستیم در عین حال که وابستگی دوتا کامپوننت یا ماژول رو از بین بردیم درعین حال ارتباط اونها و Consistency سیستم رو هم حفظ کنیم.
حال تو Net. یک EventBus طراحی کردم که میتونه Command و Query و هم Event های InMemory ارسال کنه.
شما همچنین امکان ارسال Eventهای Distributed هم دارین، بدینصورت که اگر شما دوتا اپلیکیشن روی دوتا سرور مختلف هم داشته باشین باز هم میتونین با EventBus ارتباط بینشون رو برقرار کنین و Event ارسال کنین.
اگه از CQRS استفاده می کنید این پکیج میتونه خیلی کارتون رو راحت کنه و در واقع این EventBus مختص پروژه هایی که در قالب CQRS نوشته شده، طراحی شده اما میتونین تو پروژه ها و سیستم های دیگه هم ازش استفاده کنین.
این پکیج NeoBus نام داره و میتونین اونو از NuGet Package دریافت کنین.
فقط کافیه که بعد راه اندازی Kafka و سپس نصب نوگت پکیج NeoBus، طبق دستورالعملی که تو گیت هاب پروژه منتشر شده پیش برین.
همچنین یک پروژه تست که از NeoBus استفاده کرده و پیاده سازی های مختف داخلش هست تو گیت هاب پروژه قرار داده شده که خیلی راحت میتونین طرز کار باهاش رو یاد بگیرین.
در پایان اگر سوالی داشتید یا اینکه فیچر جدیدی خواستین بهش اضافه بشه تو گیت های پروژه میتونین Issue ثبت کنین.
خوشحال میشم اگه چیزی از این پروژه یاد گرفتین یا تو پروژه هاتون ازش استفاده کردین، در گیت هاب پروژه ستاره هم بدین.
آدرس گیت هاب پروژه: NeoBus GitHub