RabbitMQ

RabbitMQ

RabbitMQ یک سرویس متن باز Message Broker یا پیام دهنده است که معماری Advanced Message Queuing Protocol یا به اختصار AMQP را ایجاد کرده‌ است.
همچنین این سرویس در ادامه با معماری plug-in به نحوی گسترش یافت تا بتواند از پروتکول‌هایی مثل Streaming Text Oriented Messaging Protocol یا به اختصار )STOMP(، MQTT و ... هم پشتیبانی کند.
در زیر می‌توانید لیست نسخه‌های رسمی پشتیبانی شده را مشاهده کنید:

  • RabbitMQ 3.8-management

برای اینکه بتوانید این سرویس را دیپلوی کنید، پارامتر‌های زیر را می‌توانید مشخص کنید:

کانفیگنوعپیش‌فرضتوضیح
service_namestringrabbitmqنامی که برای سرویس مایلید در نظر گرفته شود
rabbitmq_usernamestringrabbitmqنام کاربری
rabbitmq_passwordstringrabbitmqگذرواژه
dashboard_enabledbooleanfalseآیا rabbitmq در محیط وب در دسترس باشد یا خیر
rabbitmq_pluginsstringلیست پلاگین‌های RabbitMQ
volume_namestringنام volumeای که به سرویس وصل می شود
volume_browser_enabledbooleanfalseآیا سرویس مدیریت Dedicated Volume برای این سرویس ساخته شود یا خیر
راهنمایی

توجه داشته باشید برای استفاده از قابلیت Volume Browser سرویس شما باید به یک Dedicated Volume متصل باشد؛ در غیر این صورت با خطای سرور مواجه خواهید شد.

برای دیپلوی کردن یک RabbitMQ می‌توانیم به این شکل یک سرویس بسازیم:

fandogh managed-service deploy rabbitmq 3.8-management \
-c service_name=test-rabbitmq \
-c rabbitmq_username=rabbitmq \
-c rabbitmq_password=rabbitmq \
-c dashboard_enabled=true \
-c volume_name=VOLUME_NAME \
-m 512Mi

این دستور یک سرویس RabbitMQ ایجاد می‌کند که:

  • نام آن test-rabbitmq )یعنی در شبکه داخلی فضانام شما باقی سرویس‌ها از طریق نام test-rabbitmq و بر روی پورت 5672 می‌توانند به آن متصل شوند(.
  • میزان رم آن 512 مگابایت.
  • نا کاربری و گذرواژه rabbitmq.
  • و نام volume که داده‌های RabbitMQ بر روی آن ذخیره می‌شود VOLUME_NAME است.
نکته

توجه داشته باشید در صورتی که از volume استفاده نکرده باشید، تنطیمات و اطلاعات این سرویس در جایی ذخیره نمی‌شود و در نتیجه در صورت restart شدن سرویس، سرویس به تنظیمات اولیه بازمی‌گردد.

مهم

برای استفاده از سرویس RabbitMQ باید به نکته زیر توجه داشته باشید: برای حفط مسائل امنیتی سرویس RabbitMQ به صورت یک Internal Service عمل می‌کند و شما خارج از namespace خود به آن دسترسی ندارید.

RabbitMQ Plugins

سرویس RabbitMQ تعدادی پلاگین از پیش تعریف شده در اختیار شما قرار می‌دهد که می‌توانید بسته به نوع نیاز خود آن‌ها را انتخاب و فعال کنید. لیست تمام پلاگین‌هایی که می‌توانید از طریق سرویس مدیریت شده سکوی ابری فندق فعال کنید در جدول زیر آمده است.

نام پلاگیننام پلاگیننام پلاگین
rabbitmq_amqp1_0rabbitmq_auth_backend_cacherabbitmq_auth_backend_ldap
rabbitmq_auth_backend_httprabbitmq_auth_mechanism_sslrabbitmq_auth_backend_oauth2
rabbitmq_event_exchangerabbitmq_consistent_hash_exchangerabbitmq_federation_management
rabbitmq_federationrabbitmq_mqttrabbitmq_jms_topic_exchange
rabbitmq_peer_discovery_commonrabbitmq_peer_discovery_awsrabbitmq_peer_discovery_etcd
rabbitmq_peer_discovery_consulrabbitmq_prometheusrabbitmq_peer_discovery_k8s
rabbitmq_recent_history_exchangerabbitmq_random_exchangerabbitmq_shovel
rabbitmq_shardingrabbitmq_stomprabbitmq_shovel_management
rabbitmq_tracingrabbitmq_toprabbitmq_web_mqtt
rabbitmq_trust_storerabbitmq_web_stomprabbitmq_web_mqtt_examples
rabbitmq_web_stomp_examples

برای آنکه بتوانید از طریق fandogh-cli پلاگین‌ها را فعال کنید، می‌توانید در هنگام deploy به روش زیر عمل کن:

fandogh managed-service deploy rabbitmq latest \
-c service_name=test-rabbitmq \
-c rabbitmq_username=rabbitmq \
-c rabbitmq_password=rabbitmq \
-c dashboard_enabled=true \
-c rabbitmq_plugins="rabbitmq_trust_store rabbitmq_web_mqtt_examples rabbitmq_shovel" \
-c volume_name=VOLUME_NAME \
-m 512
مهم

به نحوه تعریف پلاگین‌ها دقت کنید. در صورتی که از fandogh-cli استفاده می‌کنید باید نام پلاگین ها را با فاصله از هم و در بین double quotation یا " " قرار دهید تا تمام لیست دریافت شود.

نسخه‌ها )Versions(

سرویس‌های مدیریت شده سکوی ابری فندق، تنها از نسخه‌های stable و پشتیبانی شده توسط توسعه ‌دهنده های اصلی آن محصول پشتیبانی می‌کند. به همین خاطر می‌توانید با خیال راحت سرویس مورد نظر خود را به همراه نسخه مورد نیازتان بر روی فضانام مستقر نمایید.

لیست نسخه‌های موجود برای سرویس RabbitMQ به شرح زیر هستند:

  • RabbitMQ 3.8-management

برای ایجاد سرویس مدیریت شده RabbitMQ با نسخه دلخواه، می‌توانید از دستور زیر استفاده کنید:

fandogh managed-service deploy rabbitmq 3.8-management
توجه

توجه داشته باشید شما نمی‌توانید نسخه سرویس در حال اجرا را تغییر دهید. چرا که ممکن است در نسخه‌های متفاوت، تغییراتی وجود داشته باشد که باعث ایجاد تداخل در تنظیمات اصلی و در نتیجه از بین رفتن داده‌ها شود!

راهنمایی

برای آنکه بتوانید نسخه سرویس خود را تغییر دهید، بهتر است ابتدا یک سرویس جدید با نسخه دلخواه ایجاد کرده؛ سپس از اطلاعات سرویس قبلی Backup تهیه نموده و وارد سرویس جدید کنید. در صورت وجود خطا یا تداخل، احتمال دارد نیاز داشته باشید برخی داده‌ها یا تنظیمات را بروزرسانی کرده و تغییر دهید.

افزودن دامنه دلخواه

اگر قصد داشته باشید دامنه یا دامنه‌های دلخواهتان را به سرویس مدیریت شده مورد نظر متصل نمایید، از طریق این بخش می‌توانید لیست این دامنه‌ها را مشخص کنید.
برای مثال فرض کنید تمایل دارید سرویس مدیریت شده مورد نظر شما روی domain.com و www.domain.com در دسترس باشد:

domains:
- name: domain.com
- name: www.domain.com
...

بدین شکل بخش دامنه را به مانیفست سرویس خود اضافه کرده و آن را مستقر نمایید:

rabbitmq_deployment.yml
kind: ManagedService
name: test-rabbitmq
spec:
service_name: rabbitmq
version: 3.8-management
parameters:
- name: rabbitmq_username
value: rabbitmq
- name: rabbitmq_password
value: rabbitmq
- name: dashboard_enabled
value: true
- name: volume_name
value: VOLUME_NAME
domains:
- name: domain.com
- name: www.domain.com
resources:
memory: 512Mi
توجه

توجه داشته باشید، دامنه‌هایی که به سرویس مدیریت شده RabbitMQ اضافه می‌شوند، در اصل به داشبورد مدیریتی آن متصل می‌شوند.

Deploy With Manifest

شما همچنین می توانید برای اجرای راحت تر سرویس های مدیریت شده از مانیفست همانند مثال زیر استفاده کنید.

  • مانیفست RabbitMQ با Dashboard
rabbitmq_deployment.yml
kind: ManagedService
name: test-rabbitmq
spec:
service_name: rabbitmq
version: 3.8-management
parameters:
- name: rabbitmq_username
value: rabbitmq
- name: rabbitmq_password
value: rabbitmq
- name: dashboard_enabled
value: true
- name: volume_name
value: VOLUME_NAME
resources:
memory: 512Mi
  • مانیفست RabbitMQ با Dashboard و پلاگین
rabbitmq_deployment.yml
kind: ManagedService
name: test-rabbitmq
spec:
service_name: rabbitmq
version: 3.8-management
parameters:
- name: rabbitmq_username
value: rabbitmq
- name: rabbitmq_password
value: rabbitmq
- name: dashboard_enabled
value: true
- name: rabbitmq_plugins
value: "rabbitmq_trust_store rabbitmq_web_mqtt_examples rabbitmq_shovel"
- name: volume_name
value: VOLUME_NAME
resources:
memory: 512Mi
  • مانیفست RabbitMQ بدون Dashboard
rabbitmq_deployment.yml
kind: ManagedService
name: test-rabbitmq
spec:
service_name: rabbitmq
version: 3.8-management
parameters:
- name: rabbitmq_username
value: rabbitmq
- name: rabbitmq_password
value: rabbitmq
- name: dashboard_enabled
value: false
- name: volume_name
value: VOLUME_NAME
resources:
memory: 512Mi