سؤال

أرى مشكلة لا يتم فيها دعم قائمة الانتظار ، إلا أن الوقت المناسب للمستهلك لتنفيذ رسالة JMS يتراوح بين 100 - 200 ثانية من الإنشاء (كما تم قياسه عبر jmstimestamp -currenttime).

كان التدفق منخفضًا إلى حد ما في قائمة الانتظار ، أقل من 30 رسالة في الدقيقة. تمكنت من حل المشكلة عن طريق إعادة تشغيل ActiveMQ ، وبعد ذلك بدأت الرسائل على أقل من 1 مللي ثانية من عندما تم إنشاؤها.

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

يبدو أن المستهلك يقوم بسحب الرسالة من قائمة الانتظار ، ولكن يجلس عليها لسبب ما.

هل هناك بعض مشكلة التكوين التي يمكن أن تسبب هذه المشكلة؟

تعديل:

السطر الأول من MDB الخاص بي هو كما يلي:

 /* Check the time since this message was created versus processed */
        try {
            long secondsToProcess = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - aMessage.getJMSTimestamp());
            if (secondsToProcess > 5) {
                log.error("JMS Consumer Start Delay: " + secondsToProcess + " s" + " JMS Message took more then 5 seconds to be processed");
            } else {
                log.debug("JMS Consumer Start Delay: " + secondsToProcess + " s");
            }
        } catch (Exception e) {
            log.error(e);
        }
هل كانت مفيدة؟

المحلول 2

كما اتضح ، كان ActiveMQ يتصرف على ما يرام ، كان عمال بلدي يأخذون وقتًا طويلاً وبالتالي احتياطي قائمة الانتظار. سمح لي الرمز في سؤالي برؤية ذلك.

نصائح أخرى

ما مدى تأكد من أن المستهلك يقوم بسحب الرسالة من قائمة الانتظار على الفور؟ ActiveMq يوفر JMSActiveMQBrokerInTime و JMSActiveMQBrokerOutTime الخصائص التي يمكنك استخدامها لتأكيد ذلك (انظر خصائص رسالة ActiveMQ).

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