سؤال

لدي نظام سوف يولد رسائل بشكل متقطع، وأود أن أرسل فقط أي صفر أو رسالة واحدة كل 5 دقائق. إذا لم يتم إنشاء رسالة، فلن تتم معالجة شيء من قبل المستهلك في قائمة الانتظار. إذا تم إنشاء مائة رسالة متطابقة في غضون 5 دقائق، فأريد فقط واحدة من تلك التي سيتم استهلاكها من قائمة الانتظار.

أنا أستخدم AMQP (Rabbitmq)، هل هناك طريقة لإنجاز هذا داخل Rabbitmq أو بروتوكول AMQP؟ هل يمكنني فحص محتويات انتظار التأكد من أنني لا أدرج مكررة؟ يبدو أن فحص قائمة الانتظار هو فكرة سيئة وليس عادة ما يجب القيام به لنظام المراسلة.

دون فحص قائمة الانتظار، هل يمكن تحقيق هذا مع هذه الأدوات؟ يحتوي الحل الوحيد الذي يتبادر إلى الذهن في قائمة انتظار ثانية تتخذ جميع الرسائل، ثم يقرأ المستهلك كل رسالة ويفعله في قائمة انتظار داخلية وينتظر لمدة 5 دقائق وأي رسائل مكررة يتم تلقيها. بعد التأخير، يتم وضع الرسالة الفردية في قائمة الانتظار "الحقيقية" المراد معالجتها.

يبدو أن هذا قد يكون موقفا شائعا، يمكن أن يتعامل نظام انتظار التعامل معه. أيه أفكار؟

هل كانت مفيدة؟

المحلول

حالة التعامل مع الدولة ليست شيئا يتعامل AMQP معه. يمكنك محاولة التعامل مع الحالة في بعض الإجراءات الموجودة أيضا على رسائل AMQ والوكالة (كما كتبت في سؤالك الأصلي). اعتمادا على وضعك ربما يمكن أن تستخدم تسلسل أو وسائل أكثر تطورا للكشف المكرر عديمي الجنسية، لكن AMQP لا يتعامل مع هذه القضية الاستخدام المحددة.

الشيء الوحيد المضمون هو أنه إذا تطابق ربط متعددة من رسالة يتم تسليمها لاحقا إلى قائمة انتظار يتم تسليم رسالة واحدة فقط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top