نظرة على قائمة انتظار صادرة من MSMQ مع JScript

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

  •  27-09-2019
  •  | 
  •  

سؤال

لقد قمت بإنشاء برنامج نصي لمراقبة مجموعة من قوائم الانتظار ، وعلى الرغم من أنه يعمل بشكل مثالي مع قوائم الانتظار عن بُعد ، إلا أنه لا يعمل مع قوائم الانتظار الصادرة. لقد قمت بتجربة عن طريق إزالة كل شيء ما عدا النصي من البرنامج النصي ، وقمت بإنشاء البرنامج النصي الاختبار التالي:

var info = new ActiveXObject("MSMQ.MSMQQueueInfo");
info.FormatName = /*<Queue name>*/;

// 0x80 = MQ_ADMIN_ACCESS
// 0x20 = MQ_PEEK_ACCESS
// 0x00 = MQ_DENY NONE
var mq = info.Open(0x80 | 0x20, 0x00);

var msg = mq.PeekCurrent(false, true, 0); 
if (msg != null) {
    WScript.echo("message found");  
}
else
{
    WScript.echo("Nothing");
}
mq.close();

ثم قمت بتشغيله على الخادم ، وحتى إذا كانت قائمة الانتظار تحتوي على أكثر من ألف رسالة ، نظرة خاطفة يعود دائما لاغية. إذا قمت بإزالة MQ_ADMIN_ACCESS ، فإنه يحاول الاتصال بقائمة الانتظار الخاصة عن بُعد وأمر في الخارج (كما هو متوقع ، كما هو الحال في السماح للرسائل بالتراكم). إذا قمت بعد ذلك ببدء قائمة الانتظار الخاصة عن بُعد ، فإنها تقرأ الرسالة بشكل صحيح منها.

بدافع الفضول ، اكتشفت ذلك info.Open ينجح دائمًا بغض النظر عن اسم قائمة الانتظار (أي ما إذا كان موجودًا أم لا) عند استخدام MQ_ADMIN_ACCESS. على سبيل المثال ، كتبت "Direct = OS: مهما كان $ randomqueuename" ، ولم أحصل على أي خطأ.

أنا لست خبيرًا في MSMQ (عكس ذلك تمامًا) ، لذلك ربما أرتكب خطأً واضحًا ولا يمكنني رؤيته. أي مساعدة أكثر من موضع ترحيب. شكرًا.

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

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

المحلول

لقد وجدت الإجابات على كلا أسئلتي:

  • كانت المشكلة التي كنت أواجهها بسبب حقيقة أنني حاولت مراقبة قائمة انتظار MSMQ التي تم تشغيلها كجزء من مجموعة موارد الكتلة ، بينما كان البرنامج النصي يعمل ضمن جلسة وحدة التحكم الحالية. للوصول إلى قائمة انتظار داخل مجموعة موارد الكتلة ، يجب القيام بما يلي:

    1. إنشاء تطبيق عام جديد
    2. مورد داخل المجموعة حيث تعمل خدمة MSMQ ، وتوجهها إلى البرنامج النصي الخاص بك.
    3. في تكوين المورد الجديد ، أضف خدمة MSMQ كاعتماد.
    4. تأكد من أن مربع الاختيار "استخدام اسم الشبكة كاسم كمبيوتر" التحقق.

تم القيام به ، سيقوم البرنامج النصي الخاص بك الآن بالاتصال بخدمة MSMQ التي تعمل داخل مجموعة الكتلة.

  • قوائم الانتظار الصادرة ليست طوابير حقيقية ، ولكن يمكن اعتبارها "قائمة بالرسائل ، التي تم تجميعها بواسطة قائمة الانتظار التي يتواجدون عليها". لذلك ، لا يمكن مراقبتها عن بُعد. هذا يعني أنه ، لمراقبتها ، البرنامج النصي/التطبيق الذي يجب نشره على كل جهاز ، وفي بيئة مجمعة ، يجب تشغيل مثيل في كل مجموعة مجموعة. هذا يضيف حمولة كبيرة إذا كان هناك العديد من الخوادم ، ولكن يمكن التغلب عليها من خلال إنشاء نظام مركزي. مهمة كبيرة على أي حال ...

آمل أن تكون النتائج التي توصلت إليها مفيدة لشخص ما في المستقبل. :) عد إلى بيتزا خبز ...

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