سؤال

I''''m حاليا مع تطبيق يحتوي على إعداد مطابقة تشبيه الدردشة التالي:

  • الدردشة هي كائن يحمل في الذاكرة ويحتوي على قائمة رسائل الدردشة
  • يتم تقديم الدردشة في عدة متصفح ويتم سحب التحديثات مع A4J: ادفع

يبدو الإعداد البرنامجي مثل هذا: يتم مشاركة مثيل كائن دردشة مع رسائل تكنولوجيا المعلومات بين مكون التماس Scoped Page في جلسات مختلفة. الآن، عندما تنشر أي جلسة رسالة جديدة، أي تعديل كائن الدردشة، يجب إخطار جميع مكونات التماس بالرسالة الجديدة بحيث يمكن نقل الحالة الجديدة إلى UI على جميع العملاء.

أستطيع أن أفكر في ثلاث طرق لتحقيق ذلك:

  1. أحداث التماس مع معرف الدردشة كمعلمة ثم يقوم كل مكون بفحص المعرف وإما التحديثات أو يتجاهل الرسالة
  2. قوائم انتظار JMS أو موضوع JMS واحد حيث يستمع كل مكون مع مرشح للدردشة فقط
  3. آلية مستمع Java النقي في كائن الدردشة المشتركة، أي سجل كل مكونات التماس إليه والإخطار هو جافا نقي ومباشر

من أجل الحجة تفترض أن عدد الدردشة كبير (عشرات الآلاف) وعدد مستخدمي الدردشة صغير (دعنا نقول 2-10).

كيف يفعل كل مقياس من الأداء الحكيم؟ هل لديك أي اقتراحات أخرى كيف تجعل هذا مع التماس وأداء جيدا؟

كما أراها، سيتم دمجها (1) ونظيفة، ولكن في النهاية كنت تخطر عشرات الآلاف من المكونات حيث يحتاج عدد قليل فقط إلى ذلك. لذلك ربما لن الحجم.

(2) سيتم دمجها ويعتمد فقط على أداء مزود JMS (والذي يمكن تبادله) وسيعمل أيضا في بيئة متفاوت المسافات دون تعديلات. لست متأكدا من أداء JMS هنا، أي بضع مئات من الرسائل في الثانية والألف من المستمعين مع مرشحات مختلفة كثيرا أم لا؟

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

بالنسبة ل (1) و (3) يجب إضافة حل يدعم التجميع يدويا إذا لزم الأمر في مرحلة ما.

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

المحلول

أوصي 2). أود أيضا أن أوصي بالقطع JMS من المعادلة - على الرغم من أنه سيمكنك من تبديل مقدمي المراسلة، فسوف يمنعك أيضا من استخدام الميزات الأكثر تقدما لنظام المراسلة. إذا كنت تستخدم قاعدة بيانات Oracle AQ. سيحدث خيارا معقولا (وهو يدعم JMS BTW.). وإلا فإنني أوصي باستخدام AMQP الذي يجب أن يكون متاحا من خلال JBoss المراسلة أو حل طرف ثالث مثل Rabbitmq..

نظرا لأن لديك بوضوح مشكلة المراسلة، يجب عليك اختيار حل المراسلة.

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