مدیریت پیامهای 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
ایجاد کنید. این روش در سیستمهایی که نیازمند اطمینان از تحویل پیامها حتی در صورت وقوع خطا هستند، بسیار مفید است.
Welcome to my blog, where I share what I’ve learned in backend development and I’d love to read your comments to improve my knowledge and learn from you ...