نحوه پیاده سازی صف های پیام در برنامه های Backend خود
هدف هر توسعه دهنده وب ایجاد محصولی است که برای طیف وسیعی از کاربران جذاب باشد. با این حال، این با مشکلات خود همراه است، که مهمترین آنها مسائل مقیاس پذیری برای برآورده کردن نیازهای کاربران است.
در صورت عدم رسیدگی، این امر میتواند منجر به اختلال در ارتباط بین سرویسها شود و اقداماتی را که برای اطمینان از تراکنشهای منظم پایگاه داده انجام میشود، شکست دهد. اما خدا را شکر، ما کارگزاران پیامی برای نجات داریم.
در این مقاله، اهمیت صف پیام را به عنوان بهترین روش برای توسعه بکاند، موارد استفاده مرتبط و ابزارهای صفبندی پیام محبوب و نحوه پیادهسازی صف پیام در برنامههای باطنی برجسته میکنیم.
در اینجا برخی از پیش نیازهایی که می توانید در این مقاله دنبال کنید آورده شده است:
آشنایی با Node.js
آشنایی با معماری میکروسرویس ها
صف پیام چیست؟
در سیستم های توزیع شده، چندین درخواست و صف در یک زمان ارسال می شود. مفهوم صف پیام، ذخیره سازی پیام ها را به شیوه ای منظم امکان پذیر می کند و به گیرندگان این پیام ها و درخواست ها اجازه می دهد تا آنها را بر اساس آن پردازش کنند.
به صورت ناهمزمان عمل میکند و امکان عملکرد مستقل اجزای مختلف یک سیستم توزیعشده را فراهم میکند. وجود اینها تضمین میکند که پیامهای ارسال شده به گیرنده در نهایت بدون توجه به خرابی سیستم، مورد توجه قرار میگیرند. پیام ها تا زمانی که تایید شوند به طور ایمن ذخیره می شوند.
موارد استفاده مرتبط کارگزاران پیام
در اینجا برخی از موارد استفاده واقعی کارگزاران پیام آورده شده است.
آنها به طور فعال در برنامه های فین تک مدرن استفاده می شوند تا از اجرای یکپارچه و منظم و پردازش تراکنش های مالی انجام شده در برنامه اطمینان حاصل کنند. این به جلوگیری از اضافه بار سرور و خطاهای تراکنش کمک می کند.
صف پیام در برنامههای اعلانهای روزانه ما نیز استفاده میشود و از دریافت زودهنگام اعلانهای ارسالی از سایر سرویسها اطمینان میدهد. این به گیرنده این امکان را می دهد تا به آن اعلان ها علیرغم زمانی که ارسال شده اند یا زمانی که گیرنده به برنامه اعلان دسترسی پیدا می کند، دسترسی داشته باشد.
همچنین در بازارهای مالی برای اجرای یکپارچه و کارآمد سفارشات مالی در حال انجام استفاده می شود. استفاده های دیگر از این ویژگی در جریان رسانه و صنعت مراقبت های بهداشتی دیده می شود.
در پاراگراف بعدی، در مورد ابزارهایی که آپشن های صف پیام را ارائه میدهند، بیشتر بحث خواهیم کرد.
نمونه هایی از خدمات صف پیام محبوب
طیف گسترده ای از برنامه ها و خدمات ویژگی های صف پیام را ارائه می دهند. برخی از این خدمات در ارائه دهندگان زیرساخت ابری تجاری تعبیه شده اند. در اینجا فهرست ی از برخی از خدمات متداول صف بندی پیام وجود دارد:
RabbitMQ
آپاچی کافکا
ردیس
آمازون SQS
Google Cloud Pub/sub
NATS
تپ اختر
IBM MQ
ما از یک برنامه Rabbit MQ Cloud-as-a-service برای تقویت پیام های خود به دلیل محبوبیت و سهولت استفاده آن استفاده خواهیم کرد. در اینجا یک پیوند به مستندات است. همچنین می توانید سایر برنامه های صف پیام ارائه شده در بالا را تحلیل کنید.
در مرحله بعد، یک پروژه آزمایشی ایجاد می کنیم که از ویژگی های صف پیام استفاده می کند.
پروژه نمایشی
در این پروژه، ما از Rabbit MQ به عنوان یک پلتفرم ابری خدماتی برای ساختن یک سیستم واسطه پیام ساده استفاده خواهیم کرد که امکان ارتباط یکپارچه و منظم بین دو سرور Node.js را فراهم می کند.
در این آموزش، یک ناشر پیام ایجاد می کنیم که به عنوان فرستنده عمل می کند، و یک مصرف کننده پیام که پیام ها را دریافت می کند.
برای شروع، ما باید هر دو سرور Node.js را ایجاد کنیم که با یکدیگر در ارتباط باشند.
می توانید دو فایل مختلف ایجاد کنید و با استفاده از npm init
یک پروژه Node را مقداردهی اولیه کنید.
پس از آن، می توانید بسته های مربوطه را نصب کنید که به اجرای ویژگی ها کمک می کند. ما از کتابخانه amqplib
، یک پیاده سازی کتابخانه Node برای Rabbit MQ استفاده خواهیم کرد.
این بسته به ما امکان می دهد تا از طریق برنامه Node.js به سرعت با RabbitMQ ارتباط برقرار کنیم. این یکپارچه به دلیل عملکردهای داخلی خود برای ایجاد صف، انتشار پیام و مصرف پیام به این امر دست می یابد. جزئیات بیشتر در مورد استفاده از آن بعداً مورد بحث قرار خواهد گرفت.
برای نصب آن در پروژه ما، لطفاً اجرا کنید:
npm i amqplib
تابع انتشار اکنون پیش نویس خواهد شد. پس از آن، ما باید amqplib
در پروژه خود مقداردهی کنیم.
const amp = require (“amqplib”)
همچنین، ما باید کارگزار RabbitMQ خود را راه اندازی کنیم که پیام های ما را مدیریت می کند.
راههای مختلفی برای ایجاد سرورهای RabbitMQ وجود دارد که محبوبترین آنها نصب آنها بر روی رایانه خانگی و سپس تنظیم آنها برای تعامل با سرورهای باطن است. می توانید نرم افزار را از اینجا دانلود کنید. با این حال، برای سهولت استفاده، ما از یک کارگزار RabbitMQ مبتنی بر ابر به عنوان یک برنامه خدماتی برای تولید سرور خود استفاده خواهیم کرد.
برای انجام این کار، لطفاً به https://www.cloudamqp.com/ بروید و یک حساب کاربری ایجاد کنید. برای این آموزش، یک نمونه ایجاد شد و در نزدیکترین منطقه به من پیکربندی شد. با ایجاد موفقیت آمیز نمونه، جزئیات Rabbit MQ در دسترس خواهد بود.
در ادامه، یک صف پیام ایجاد می کنیم که در آن هر دو طرف می توانند به عنوان خط لوله اتصال استفاده کنند. ما با ایجاد یک تابع برای ارسال پیام شروع خواهیم کرد.
async function sendMessage ( msg ) { try { const connection = await amqp.connect(url); const channel = await connection.createChannel(); await channel.assertQueue(queue); await channel.sendToQueue(queue, Buffer.from(msg));
در کد بالا، یک اتصال تضمین و حفظ شد. پس از آن، یک کانال ارتباطی نیز ایجاد شد. سپس تابع صف ادعا هنگام اجرا اعلام می شود و اطمینان حاصل می شود که صف موجود حفظ می شود و در صورت عدم وجود صف ایجاد می کند.
پیام پیوست شده به تابع بافر می شود و سپس به صف ایجاد شده ارسال می شود.
async function receiveMessage ( ) { try { const connection = await amqp.connect(url); const channel = await connection.createChannel(); await channel.assertQueue(queue); await channel.consume(queue, ( msg ) => { console .log( `Received message: ${msg.content.toString()} ` ); channel.ack(msg); });
تابع گیرنده نیز برای دریافت هر پیامی که وارد صف می شود با اجرای روش مصرف در صف دقیق اجرا می شود. در مورد ما، پیام به عنوان یک پیام گزارش خروجی می شود.
اکنون تابع ack
برای تایید پیام دریافتی از صف اجرا می شود.
اینم کد کامل پروژه:
دیگر اخبار
const amqp = require ( "amqplib" ); const url = "amqp://localhost" ; // Replace with your RabbitMQ server URL const queue = "queue" ; async function receiveMessage ( ) { try { const connection = await amqp.connect(url); const channel = await connection.createChannel(); await channel.assertQueue(queue); await channel.consume(queue, ( msg ) => { if (msg !== null ) { console .log( `Received message: ${msg.content.toString()} ` ); channel.ack(msg); } }); } catch (err) { console .error( "Failed to receive message:" , err); } } receiveMessage();
در اینجا کد برنامه ناشر پیام آمده است:
const amqp = require ( "amqplib" ); const url = "amqp://localhost" ; // Replace with your RabbitMQ server URL const queue = "queue" ; async function sendMessage ( msg ) { try { const connection = await amqp.connect(url); const channel = await connection.createChannel(); await channel.assertQueue(queue); await channel.sendToQueue(queue, Buffer.from(msg)); console .log( `Message sent to ${queue} : ${msg} ` ); await channel.close(); await connection.close(); } catch (err) { console .error( "Failed to send message:" , err); } } sendMessage( "Hello, world!" );
این هم خروجی کد:
اطلاعات اضافی
تا کنون، ما این آموزش را در مورد صف پیام و نقش آن در تسهیل ارتباطات یکپارچه در سیستم های مختلف تکمیل کرده ایم. برای بهبود بیشتر مجموعه مهارتهای خود، در اینجا برخی از بهترین شیوههای اضافی وجود دارد که باید هنگام ایجاد خدمات پیچیده اجرا شوند:
محدود کردن نرخ
تعادل بار
نظارت بر برنامه و ثبت گزارش
ادغام و استقرار مداوم
خلاصه
ما اهمیت کارگزاران پیام و نحوه اجرای صف پیام در یک برنامه کاربردی را برجسته کرده ایم.
به راحتی می توانید مقالات دیگر من را در اینجا تحلیل کنید. تا دفعه بعد، به کدنویسی ادامه دهید!
ارسال نظر