التحكم الديناميكي في قائمة انتظار رسائل ActiveMQ باستخدام Camel

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

سؤال

أنا مستجد في ActiveMQ / Camel مع وضع سيناريو محدد في الاعتبار، وأتساءل أولاً عما إذا كان ذلك ممكنًا وثانيًا ما إذا كان شخص ما قد يقدم القليل من التوجيه.

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

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

أعرف أساسيات إعداد المسارات في الجمل وتجميع الرسائل في قائمة الانتظار وما إلى ذلك، لكن لا يمكنني معرفة ذلك من المستندات.

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

المحلول

ونعم يبدو أنك تبحث عن وسيط الجانب اختناق لتجنب المستهلكين لمنع.

هل رفع طلبك في منتدى ActiveMQ المستخدم / ديف؟

نصائح أخرى

هل يمكن أن مجرد استخدام throttler الإبل الموجودة ثم استخدام طابور مختلفة لكل نوع الرسائل التي تحتاج إلى تكوين معدل خنق مختلف؟

ومنها مثلا.

from("activemq:Queue1.Input").
    throttle(20).
    to("activemq:Queue1.Output");  
from("activemq:Queue2.Input").
    throttle(5).
    to("activemq:Queue2.Output");  

لماذا لا تقوم بإضافة RFE في اباتشي الجمل جيرة؟

ما هي المنطق الخاص لتحديد سعر لمجموعة معينة من الرسائل؟

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

إذا كنت تأخذ بعض الوقت لملء في حال استخدامك وتسجيل RFE ثم أنا واثق من أن المجتمع الجمل، يمكن للمطورين أن تساعد.

ويمكنك محاولة لتنفيذ ذلك بنفسك. في الأساس أي شيء هو المعالج، لذلك يمكنك القيام به من ( "activemq: طابور: فو") عملية (myOwnThrottler). ل( "الفول: handleMessage")؛.

ويمكنك توسيع بعض الفئات في الجمل: - DelegateProcessor - DelayProcessorSupport - Throttler


ونويل إبسن اباتشي الجمل المتعهد

وتوسيع التكامل المصدر: http://fusesource.com بلوق: http://davsclaus.blogspot.com/

حسنًا، سأعرض السيناريو بمزيد من التفاصيل وأسلط الضوء على العائق الرئيسي بقدر ما أستطيع قوله.

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

  • مجموعة 1:معدل التدفق = 1؛وقت التدفق = 60 (1 في الدقيقة)
  • المجموعة 2:معدل التدفق = 1؛وقت التدفق = 1 (1 في الثانية)

أقوم بتنفيذ المعالج حسب كلوز الذي يفحص حقول الرأس ويستخدمها كمدخل تأخير.

أقوم بإضافة 20000 رسالة من المجموعة 1 و 20000 من المجموعة 2

نظرًا لأن الخانق من جانب المستهلك، فإن التأخير الذي يتم تنشيطه بواسطة المجموعة 1 سوف يتسبب في أن يصبح بطيئًا عن طريق ملء مخزن الإدخال المؤقت الخاص به بسرعة وستتوقف رسائل المجموعة 2 بعد ذلك... حتى لو استخدمت قوائم انتظار متعددة وفقًا لما هو مطلوب جوامع.

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

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

آمل أن أكون قد شرحت نفسي بوضوح وأشكرك على الاقتراحات حتى الآن.

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