كيف تمنع إعادة ترتيب الرسائل باستخدام PriorityExecutorBasedEventDrivenDispatcher؟

StackOverflow https://stackoverflow.com/questions/8354958

سؤال

يحتاج ممثل Akka FSM الخاص بي إلى إعطاء الأولوية للرسائل حسب النوع. لكي تكون محددًا ، يتلقى الممثل رسائل في إحدى هذه الفئات ، بترتيب حسب الأولوية:

  1. الرسائل التي تؤدي إلى انتقالات الحالة
  2. الرسائل التي تستعلم عن الحالة الحالية
  3. الرسائل التي تجعل الممثل يؤدي بعض الأعمال ("WorkMsg")

وفقًا لمستندات Akka ، يمكن إعطاء الأولوية للرسائل وفقًا للقائمة أعلاه باستخدام PriorityExecutorBasedEventDrivenDispatcher الذي يحتوي على PriorityGenerator. لقد طبقت ممثل ولايات ميكرونيزيا الموحدة مع هذا المرسل وهو يعمل بشكل جيد.

تكمن المشكلة في أن هذا المرسل يعيد ترتيب WorkMsgs أيضًا ، وهذا ليس ما أريده.

تحتوي WorkMs على طابع زمني ويتم إرسالها إلى ممثل FSM مرتبة حسب هذا الطابع الزمني. عندما يقوم ممثل FSM بمعالجة WorkMsgs ، فإنه يتجاهل WorkMs أقدم من WorkMsg السابقة. لذلك إذا أعيد ترتيبها ، أفقد البيانات.

بدون PriorityExecutorBasedEventDrivenDispatcher ، لا تتم إعادة ترتيب WorkMsgs ، ولكن لا يتم تلبية الأولويات الواردة في القائمة أعلاه.

كيف يمكنني الحفاظ على الأولويات الواردة في القائمة أعلاه ، مع منع إعادة ترتيب الرسائل ذات الأولوية نفسها؟

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

المحلول

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

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