معرفی RabbitMQ: بخش سوم، پیاده سازی با سی شارپ

فهرست بخش های این آموزش:


در این بخش یاد میگیریم که چطور RabbitMQ را در سمت Consumer و Producer پیاده سازی کنیم و پیام را ارسال و دریافت کنیم.

ابتدا احتیاج داریم که در RabbitMQ یک Queue برای پیام ها ایجاد کنیم.

اگر RabbitMQ را نصب نکرده اید بخش اول را مطالعه کنید.

مرورگر را باز کرده و به آدرس http://localhost:15672 یا هر آدرسی که برای Management تنظیم کرده اید بروید:

به تب Queues رفته و در زیر جدول بر روی "Add a new queue" کلیک کنید تا فرم آن باز شود.

در فیلد Name مقدار "test_queue" را به عنوان نام Queue وارد کنید و روی "Add Queue" کلیک کنید.

چون هیچ Exchange مشخصی را به این Queue مقید(Bind) نکرده ایم، از Exchange پیش فرض استفاده می شود؛ همانطور که در بخش دوم گفته شد، این Exchange پیام ها را به سمت یک Queue که نام آن برابر Routing key پیام باشد هدایت میکند.

اکنون باید یک Producer ایجاد کنیم که پیام را به سمت RabbitMQ ارسال کند.

ابتدا پروژه سی شارپ جدیدی برای Producer ایجاد کرده سپس پکیج "RabbitMQ.Client" را از Nuget نصب کنید؛ پس از نصب پکیج کد زیر را در Program.cs وارد کنید.

در کد بالا از خط 11 تا 18 یک کانکشن برای اتصال به RabbitMQ ایجاد کرده ایم سپس در خط 20 یک Channel از روی این کانکشن میسازیم سپس در خطوط بعد پیام را از کاربر می گیریم و آن را به آرایه ای از بایت تبدیل میکینم و ارسال می کنیم؛ در خط 30 متد BasicPublish در اولین آرگومان، نام Exchange را دریافت می کند که ما آن را خالی گذاشته ایم تا پیام به سمت Exchange پیش فرض ارسال شود؛ در آرگومان دوم Routing key دریافت می شود.

کد بالا را اجرا کنید و یک پیام ارسال کنید سپس به پنل مدیریت RabbitMQ بروید در تب Queues در جدول لیست Queue ها خواهید دید که ستون Ready و Total عدد یک را نشان می دهند(اگر هنوز هم صفر بود چند ثانیه صبر کنید سپس صفحه را رفرش کنید).

پیام ما درون Queue قرار گرفت و تا زمانی که Consumer آن را پردازش کند باقی خواهد ماند؛ اکنون احتیاج به یک Consumer داریم که پیام ما را دریافت کند؛ برای این کار ابتدا پروژه سی شارپ جدیدی برای Consumer ایجاد کرده سپس پکیج "RabbitMQ.Client" را از Nuget نصب کنید؛ پس از نصب پکیج کد زیر را در Program.cs وارد کنید.

در کد بالا از خط 12 تا 21 یک کانکشن برای اتصال به RabbitMQ ایجاد کرده ایم سپس در خط 23 یک Channel از روی این کانکشن میسازیم. در خط 25 تا 35 یک Event برای دریافت پیام ها ایجاد می کنیم.

زمانی که RabbitMQ پیام را برای Consumer ارسال میکند ممکن است پیام در حین پردازش به هر دلیلی با خطا مواجه شود؛ در اینصورت پیام از بین می رود؛ اما RabbitMQ راه حلی برای این مشکل دارد؛ به این صورت که اگر موقع ایجاد صف Durability آن را برابر Durable قرار دهیم(به طور پیش فرض برابر Durable است) پس از آنکه RabbitMQ پیام را برای Consumer ارسال کرد منتظر پاسخ از طرف Consumer می ماند و پس از دریافت پاسخ، پیام را از Queue حذف میکند. در خط 32 پاسخ تایید را برای RabbitMQ ارسال می کنیم تا پیام را حذف کند.


در بخش های بعدی مباحث پیشرفته تری را از RabbitMQ یاد میگیریم.

این مطالب در کانال تلگرام قرار گرفت. می توانید از تلگرام هم من را دنبال کنید.

https://t.me/Dev_EhsanHosseini