سؤال

هل يمكنني تعيين الحد الأقصى لحجم علبة فاعل في سكالا؟

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

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

المحلول

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

والمستهلك يطلب بنشاط للمنتجات من المخزن المؤقت، والذي بدوره يرسل إلى الخلف منتج واحد. إذا كان المخزن المؤقت فارغ، والمستهلك وتبقي تنتظر الإدخال.

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

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

نصائح أخرى

وطريقة Actor.mailboxSize إرجاع عدد الرسائل معلقة في صندوق البريد الخاص الفاعل.

ويمكن استخدام هذه لاختناق المنتج بطرق مختلفة.

وعلى سبيل المثال، يمكن أن يكون احتمال واحد،

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

ويتجنب هذا الاقتراع وكذلك أي إسقاط الرسائل.

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