مدیریت پیام‌های Persistent در RabbitMQ با استفاده از php-amqplib در لاراول

2024-09-15

تنظیم پیام‌های پایدار (persistent) در RabbitMQ با استفاده از کتابخانه php-amqplib در لاراول که این تنظیمات باعث می‌شود پیام‌ها حتی پس از ری‌استارت سرور RabbitMQ نیز حفظ شوند.

در سیستم‌های پیام‌رسانی مانند RabbitMQ، پیام‌ها می‌توانند به دو صورت پایدار (persistent) و غیربایدار (non-persistent) ارسال شوند. انتخاب بین این دو حالت به نیازمندی‌های شما برای حفظ یا عدم حفظ پیام‌ها پس از ری‌استارت سرور بستگی دارد.

 

پیام‌های پایدار (Persistent) و غیربایدار (Non-Persistent)

پیام‌های persistent به صورت دیسکی ذخیره می‌شوند و در صورت از کار افتادن یا ری‌استارت شدن RabbitMQ، همچنان باقی خواهند ماند. در مقابل، پیام‌های non-persistent فقط در حافظه ذخیره می‌شوند و اگر سرور از کار بیفتد یا ری‌استارت شود، این پیام‌ها از بین خواهند رفت.

 

در لاراول و با استفاده از کتابخانه‌ی php-amqplib، شما می‌توانید پیام‌های خود را به صورت پایدار تنظیم کنید تا از امنیت ذخیره‌سازی آن‌ها مطمئن شوید.

 

تنظیم پیام‌های پایدار با php-amqplib

برای این کار کافی است ویژگی delivery_mode پیام را به صورت persistent تنظیم کنید. در زیر نمونه‌ای از کد آورده شده که پیام‌ها را به صورت پایدار ارسال می‌کند:

 

use PhpAmqpLib\Message\AMQPMessage;
$data = "Test Message";
$msg = new AMQPMessage($data, [
    'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT
]);
$channel->basic_publish($msg, '', 'queue_name');

 

در این مثال، با تنظیم delivery_mode روی AMQPMessage::DELIVERY_MODE_PERSISTENT، پیام به‌صورت پایدار ارسال می‌شود. این بدان معنی است که پیام حتی در صورت ری‌استارت سرور RabbitMQ حفظ می‌شود.

 

همچنین برای اطمینان از حفظ پیام‌ها باید صف خود را نیز به صورت پایدار (durable) تعریف کنید:

 

$channel->queue_declare('queue_name', false, true, false, false);

 

پارامتر سوم در این متد، که true تنظیم شده است، به معنای پایدار بودن صف است. با این تنظیمات، پیام‌ها در این صف پس از ری‌استارت سرور RabbitMQ همچنان در دسترس خواهند بود.

 

نتیجه‌گیری

برای اطمینان از حفظ پیام‌ها در RabbitMQ، باید پیام‌های خود را به صورت persistent تنظیم کرده و صف را نیز به صورت durable ایجاد کنید. این روش در سیستم‌هایی که نیازمند اطمینان از تحویل پیام‌ها حتی در صورت وقوع خطا هستند، بسیار مفید است.