توسعه دهنده نرم افزار در جاب ویژن
معرفی RabbitMQ: بخش چهارم، آشنایی با رابط مدیریت تحت وب
فهرست بخش های این آموزش:
- بخش اول، RabbitMQ چیست؟
- بخش دوم، آشنایی با Exchange ها، Routing Key ها و Binding ها
- بخش سوم، پیاده سازی با سی شارپ
- بخش چهارم، آشنایی با رابط مدیریت تحت وب
در این بخش یاد می گیریم که چطور از طریق پنل مدیریت تحت وب RabbitMQ، صف ها، Connection ها، Channel ها، Exchange ها و User ها را مدیریت کنیم. علاوه بر آن، می توانیم نرخ ارسال و دریافت پیام ها را مانیتور کنیم؛ یا به طور دستی پیامی را به یک Exchange یا Queue خاص ارسال کنیم.
این رابط کاربری یک پلاگین است که در پشت صحنه به وسیله HTTP API با RabbitMQ ارتباط برقرار می کند و به طور پیش فرض بر روی RabbitMQ نصب شده است و پس از نصب RabbitMQ می توانیم آن را فعال کنیم(در بخش اول یاد گرفتیم که چطور RabbitMQ را نصب کنیم و پلاگین Management را فعال کنیم ). از این رابط مدیریت می توان برای عیب یابی سیستم هم استفاده کرد.
در این بخش با همه ی تب های این رابط مدیریت آشنا خواهیم شد. سپس با یک مثال خواهیم دید که چطور یک Queue و Exchange و Binding بین آن ها را نصب و کانفیگ کنیم.
مفاهیم:
- مفهوم Cluster: یک Cluster شامل تعدادی Node از کامپیوتر هایی است که با هم کار می کنند. یک Instance از RabbitMQ که بیش از یک Node داشته باشد، Cluster نامیده می شود.
- مفهوم Node: یک کامپیوتر در RabbitMQ Cluster.
تب Overview
با نگاه کلی به شکل 1 دو نمودار را می بینیم؛ یک نمودار پیام های صف شده(Queued Message) را نشان می دهد و دیگری نرخ پیام ها(Message rates) را نشان می دهد. در بالای نمودار ها با کلیک روی "last minute" می توان فاصله زمانی(Interval) نمودار ها را تغیر داد. همچنین با کلیک روی "?" می توان اطلاعات دیگری را مشاهده کرد.
نمودار پیام های صف شده(Queued message):
این نمودار یک تعداد کلی از پیام های صف شده از همه Queue ها می دهد. Ready تعداد پیام های آماده تحویل را نشان میدهد. Unacked تعداد پیام هایی که منتظر پاسخ از طرف Consumer هستند تا از Queue حذف شوند را نشان می دهد.
نمودار نرخ پیام ها(Message rates):
نرخ پیام ها یک نمودار است که نشان می دهد رسیدگی به پیام ها با چه سرعتی انجام گرفته.
بخش Nodes:
این بخش اطلاعاتی را درباره Node های مختلف RabbitMQ نشان می دهد. همچنین در اینجا اطلاعاتی درباره سرور و رم و تعداد Erlang process به ازای هر Node و پلاگین های فعال وجود دارد.
بخش های Import/Export definitions:
این امکان وجود دارد که کانفیگ ها و تنظیمات انجام شده در RabbitMQ را Export کنیم یا یک کانفیگ را Import کنیم. با Export کردن و دانلود کانفیگ ها ما یک فایل JSON از همه تنظیمات و کانفیگ های RabbitMQ خواهیم داشت. از این فایل JSON می توان برای بازیابی Exchange ها، Queue ها، VHost ها، سیاست(Policy) ها و User ها استفاده کرد. همچنین از این ویژگی می توان برای بک آپ استفاده کرد.
تب های Connections و Channels
اتصالات(Connection) و Channel ها در RabbitMQ می توانند وضعیت های مختلفی اعم از Starting، Tuning، Opening، Running، Flow، Blocking، Blocked، Closing یا Closed باشد.
تب Connections
در تب Connection(شکل 4) اتصالات فعال به سرور RabbitMQ را نشان می دهد. Username نشان می دهد که این Connection مربوط به کدام کاربر است. Channels تعداد Channel هایی که از این Connection استفاده می کنند را نشان می دهد. SSL/TLS مشخص می کند که آیا این Connection توسط SSL امن شده است یا خیر.
با کلیک روی یکی از Connection ها می توان یکسری اطلاعات درباره آن Connection خاص بدست آورد(شکل 5). در این بخش میتوان لیست Channel های فعال که درون این Connection و نرخ جابجایی داده ها و مشخصات Client را مشاهده کرد، همچنین در این قسمت می توانید Connection را ببندید.
تب Channels:
تب Channel(شکل 6) اطلاعاتی را درباره تمامی Channel های حاضر نشان می دهد.
با کلیک بر روی یکی از Channel ها اطلاعاتی درباره آن به ما میدهد(شکل 7). نرخ پیام ها و تعداد Consumer ها را می توان از این بخش مشاهده کرد.
تب Exchanges
لیست همه Exchange ها را می توان در این تب مشاهده کرد(شکل 8). ستون Features پارامتر های Exchange را نشان می دهد(برای مثال: D به معنی Durable است و AD به معنی Auto-Delete). مقدار ستون های Features و Type را می توان هنگام ساخت Exchange مشخص کرد. در این لیست تعدادی Exchange وجود دارند که با amq شروع شده اند و یکی به نام (AMQP Default) که از Exchange های پیشفرض هستند.
با کلیک بر روی نام Exchange می توانید جزئیات آن Exchange را مشاهده کنید(شکل 9). اضافه کردن Binding جدید به این Exchange و مشاهده Binding های قبلی و ارسال پیام به وسیله این Exchange و حذف Exchange از کار های دیگری است که می توان در این قسمت انجام داد.
تب Queues
در این تب میتوان همه Queue های ثبت شده در یک یا همه VHost ها را مشاهده کرد(شکل 10). همچنین می توانید در این قسمت یک Queue جدید بسازید. Queue ها براساس اینکه چرا و چطور ساخته می شوند پارامتر ها و آرگومان های متفاوتی خواهند داشت. ستون Feature پارامتر ها و آرگومان های هر Queue را نشان می دهد، مثل:
- مفهوم Durable: یک Durable Queue اطمینان می دهد که RabbitMQ پیام ها به دست Consumer می رساند و منتظر می ماند تا Consumer پیام را پردازش کند، سپس پیام را از درون Queue حذف می کند؛ تا اگر پیام در حین پردازش در سمت Consumer با خطا رو به رو شد RabbitMQ دوباره پیام را برای پردازش ارسال کند.
- مفهوم Message TTL: مدت زمانی که پیام درون Queue می تواند زنده بماند قبل از اینکه دور انداخته شود.
- مفهوم Auto-expire: مدت زمانی که Queue می تواند بدون استفاده بماند قبل از اینکه به طور خودکار حذف شود.
- مفهوم Max length: حداکثر تعداد پیامی که Queue می تواند نگهداری کند قبل از اینکه آن ها را دور بریزد.
- مفهوم Max length byte: حداکثر سایز کل پیام هایی که Queue می تواند نگهداری کند قبل از اینکه آن ها را دور بریزد.
با کلیک روی هر Queue از لیست Queue ها میتوان همه اطلاعات مربوط به آن را مشاهده کرد(شکل 11). دو نمودار اول به طور کلی اطلاعات مشابهی را درباره تعداد و نرخ پیام های این Queue نشان می دهند.
بخش Consumers
در این بخش می توان Consumer ها و Channel های متصل به این Queue را مشاهده کرد(شکل 12).
بخش Bindings
همه Binding های فعال مربوط به این Queue در این قسمت نمایش داده می شوند. همچنین Binding های جدید را می توان از این بخش ایجاد کرد(شکل 13).
بخش Publish message
در این بخش می توان یک پیام را به صورت دستی بر روی Queue منتشر کرد(شکل 14). این پیام به وسیله Exchange پیش فرض یعنی AMQP default با Routing key برابر با نام Queue منتشر خواهد شد؛ همچنین این امکان وجود دارد که پیام را بر روی یک Exchange منتشر کنید(در قسمت معرفی تب Exchange در این باره توضیح داده شد).
بخش Get messages
در این بخش می توان پیام ها را به صورت دستی بررسی کرد(شکل 15). این نکته را در نظر داشته باشید که با این کار پیام از صف خارج می شود و ممکن است به دست Consumer نرسد؛ برای جلوگیری از این اتفاق فیلد Ack Mode را برابر با "Nack message requeue true" قرار دهد اگر با گزینه های دیگر آشنا نیستید از همین گزینه استفاده کنید؛ این گزینه پیام را از صف خارج و دوباره وارد می کند و عملا پیام از دست نمی رود. در Messages تعداد پیام هایی که میخواهید واکشی شود را وارد کنید.
بخش های Delete و Purge
در این بخش می توانیم یک Queue را حذف یا خالی کنیم(شکل 16). با زدن از دکمه Delete Queue میتوان یک Queue را حذف کرد و با زدن دکمه Purge Messages می توان همه پیام های درون Queue را حذف کرد.
تب ادمین
در بخش Users(شکل 17) میتوان کاربران را حذف و اضافه کرد و دسترسی هایی برای آن ها تعیین کرد.
در بخش Virtual Hosts(شکل 18) میتوان Virtual Host ایجاد کرد و آن ها را مدیریت کرد.
یک مثال
در این مثال می خواهیم یک Exchange به نام example.exchange ایجاد کنیم؛ سپس یک Queue به نام example_queue ایجاد میکنیم؛ در مرحله بعد یک Binding به نام example_binding و Binding key با مقدار example_key ایجاد میکنیم؛ در مرحله آخر یک پیام را از example.exchange ارسال می کنیم تا وارد example_queue شود؛ و در مرحله آخر پیام را از example_queue می خوانیم.
1- یک exchange به نام example_exchange از نوع Direct ایجاد می کنیم(شکل 19). برای این کار وارد تب Exchange می شویم و در بخش "Add a new exchange" کانفیگ Exchange جدید را وارد می کنیم.
2- یک Queue به نام example_queue ایجاد می کنیم. برای این کار وارد تب Queues می شویم و در بخش "Add a new queue" کانفیگ Queue جدید را وارد می کنیم(شکل 20).
3- اکنون باید بین example.exchange و example_queue یک Binding ایجاد کنیم تا Message هایی که با Routing key برابر example_key وارد example.exchange می شوند به example_queue ما هدایت شوند. برای این کار وارد تب Queues می شویم، سپس از جدول Queue ها بر روی example_queue کلیک می کنیم تا وارد جزئیات آن شویم سپس در بخش Bindings کانفینگ Binding جدید را وارد می کنیم(شکل 21).
4- تا اینجا Queue و Exchange و Binding بین آن ها آماده شد. اکنون یک پیام را توسط example.exchange برای example_queue ارسال می کنیم. برای این کار وارد تب Exchanges شده و از جدول Exchange ها بر روی example.exchange کلیک می کنیم تا وارد جزئیات آن شویم؛ سپس در بخش "Publish message" اطلاعات پیامی که می خواهیم ارسال شود را وارد می کنیم(شکل 22).
5- تا الان پیام ما برای example_queue ارسال شد و در صف قرار گرفت؛ اکنون می خواهیم پیام را از صف خارج کنیم و نمایش دهیم. برای این کار به تب Queues رفته و از جدول Queue ها روی example_queue کلیک کنید تا وارد جزئیات آن شویم؛ سپس از بخش "Get messages" می توانیم پیام های درون Queue را ببینیم؛ اما می خواهیم علاوه بر اینکه پیام نشان داده میشود از Queue هم حذف شود به این منظور فیلد "Ack mode" را برابر "Ack message requeue false" قرار می دهیم(شکل 23).
در بخش های بعدی مباحث پیشرفته تری را از RabbitMQ یاد میگیریم.
این مطالب در کانال تلگرام قرار گرفت. می توانید از تلگرام هم من را دنبال کنید.
مطلبی دیگر از این انتشارات
نکات Refactoring برای برنامه نویسان C#
مطلبی دیگر از این انتشارات
آموزش زمانبندی کارها با HangFire در Asp.Net Core
مطلبی دیگر از این انتشارات
بررسی نکات کلیدی نظرسنجی Stackoverflow 2019 (قسمت چهارم-آخر)