در فرآیند استفاده از RabbitMQ، برخی سناریوهای تجاری نیازمند اطمینان از مصرف به ترتیب میباشند. به عنوان مثال، در یک سناریوی تجاری که سه پیام برای انجام عملیات اضافه کردن، اصلاح و حذف دادهها ایجاد میشود، اگر ترتیب مصرف تضمین نشود، دنباله اجرا ممکن است به صورت حذف، اصلاح، اضافه تغییر کند و این باعث بینظمی میشود.
همانطور که در زیر نشان داده شده است:
موضوع توالی پیام در RabbitMQ باید از سه جنبه مورد توجه قرار گیرد: ترتیب ارسال پیامها، ترتیب پیامها در صف و ترتیب مصرف پیام.
ترتیب ارسال پیامها
ترتیب ارسال پیام در سرانجام نهایتاً برای بیشتر کسبوکارها به طور دقیق مورد نیاز نیست. اهمیتی ندارد که کدام کسی ابتدا پیام را ارسال میکند. اگر یک تجارت نیاز دارد که پیامها به ترتیب ارسال شوند، این بدان معنی است که فقط یک پیام میتواند با قفل کلی ارسال شود و نمیتوان پیامها را به صورت همزمان ارسال کرد.
ترتیب پیامها در صف
در RabbitMQ، پیامها در نهایت در یک صف ذخیره خواهند شد. در یک صف، پیامها براساس اصل اولین وارد، اولین خارج مرتب میشوند که توسط RabbitMQ تضمین میشود و معمولاً نیازی به نگرانی توسعهدهندگان ندارد.
توجه: ترتیب پیامها در صفوف مختلف تضمین نمیشود. به عنوان مثال، هنگام ورود به ایستگاه مترو، اگر به یکی از سه صف بپیوندید، ترتیب ورود به ایستگاه نمیتواند بین صفوف مختلف تضمین شود.
ترتیب مصرف پیام
زمانی که در مورد چگونگی اطمینان از ترتیب پیامها صحبت میکنیم، معمولاً به ترتیبی که مصرفکنندگان پیامها را مصرف میکنند اشاره داریم. در سناریوهایی که چند مصرفکننده از همان صف پیام مصرف میکنند، معمولاً امکان تضمین ترتیب پیامها وجود ندارد. همانطور که در نمودار ابتدایی نشان داده شده است، با وجود اینکه پیامها در صف پیام مرتب هستند، مصرفکنندگان چندان چرخه مصرف پیامها به صورت همزمان، سرعت بازیابی پیامها، سرعت اجرای منطق تجاری و استثناءهای احتمالی اجرا میتواند همه به بینظمی ترتیب پیامها منجر شود.
به عنوان مثال: پیامهای A، B و C به ترتیب وارد صف میشوند. مصرفکننده A1 پیام A را دریافت میکند و مصرفکننده B1 پیام B را دریافت میکند. با این حال، اگر مصرفکننده B1 سریعتر اجرا کند، ممکن است قبل از مصرفکننده A1 تکمیل شود یا اگر مصرفکننده A1 با یک خطا روبهرو شود، هر دو حالت میتواند منجر به بینظمی ترتیب پیامها شود.
راهحل معمول برای مشکل مصرف به ترتیب این است که یک صف تنها یک مصرفکننده داشته باشد به این ترتیب، پیامها میتوانند یکییکی و به ترتیب پردازش شوند. نقطه ضعف این روش کاهش توانمندی همزمان و امکان مصرف همزمان پیامها میباشد. این یک تعادل است.
توجه: اگر تجارت نیاز به مصرف توالی و افزایش همزمانی دارد، یک راه حل رایج این است که چندین صف را فعال کند. تجارت میتواند پیامها را بر اساس قوانین به صفوف مختلف توزیع کند و به این ترتیب سطح همزمانی را افزایش دهد. به عنوان مثال، در یک سناریوی سفارشات اینترنتی، تنها لازم است که ترتیب پیامهای سفارش برای یک کاربر را تضمین کنید. پیامهای متعلق به کاربران مختلف را میتوانید به صفوف مختلف ارسال کنید.