شكرا استلام رسالة الحدث فقط رسالة واحدة في الثانية الواحدة ؟

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

  •  23-08-2019
  •  | 
  •  

سؤال

لقد قمنا ببناء تطبيق البنية التحتية على أساس شكرا.

يمكننا إرسال واستقبال الرسائل على ما يرام, و معظم الأشياء سريعة جدا و موافق.

ومع ذلك, لقد لاحظت أنه إذا تقدم مجموعة من الرسائل "في آن واحد" ، ويقول 5,000 الرسائل - أن شكرا سوف تحصل على رسائل 3rd الطرف التطبيق على الآخر بسرعة كبيرة, و أن هذا التطبيق سوف عملية أيضا بسرعة كبيرة ، وأنه سوف ar انتظار الردود مرة أخرى إلى الوسيط بسرعة أيضا, أقول أقل من دقيقة.

ولكن لسبب ما ، VB.NET EXE التي نشأت الرسائل في أول مكان يظهر فقط أن تكون المعالجة عودة الرسائل التي تتلقاها بطريقة متقطعة ، والقيام في بعض الأحيان عن واحد في الثانية, في بعض الأحيان أخذ راحة لمدة ساعة أو نحو ذلك ثم تعود إلى واحد في الثانية.

Origin (VB.NET EXE which we manage) 
    -> Broker  (which we manage)
        -> (3rd party app) 
            -> back to the same broker 
                -> back to the origin app.

المتلقي ينتظر الحدث MessageListener من التعليمات البرمجية C# تحميلها من شكرا ربما قبل 9 أشهر:

Public Delegate Sub MessageListener(ByVal message As NMS.IMessage)
     Member of: NMS

أعتقد أن ما يحدث هو أن MessageListener فقط يعطينا رسالة واحدة (NMS.الكتروني) مضغة ، وهذا ما كنا العملية.

هل هناك طريقة لقول "على MessageListener الحدث ، يرجى معرفة ما إذا كان هناك رسائل أخرى على قائمة الانتظار الآن تفعل لهم كل شيء؟"

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

المحلول

اتضح أن نعتقد أننا نعرف أكثر قليلا الآن ما هو هذا حول.

عندما VB.NET WinForms التطبيق الذي يستخدم شكرا DLL في نهاية المطاف حوادث, الذي يميل إلى القيام به بضع مرات في الأسبوع ، لدينا حراسة برنامج يستخدم Winternals pslist و pskill المرافق جني غيبوبة, ثم تبدأ من جديد اتصال العميل.

عندما يحدث هذا, باستخدام jconsole تحليل وسيط يبين لنا أن غيبوبة الدورة لا تزال مسجلة ، وذلك هو جديد العميل.

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

في بعض نقطة, وسيط أو مكدس TCP ربما يلاحظ أن غيبوبة لم يحفظ إنه اتصال TCP النشطة ويعطي ؛ ثم العملية تعود إلى وضعها الطبيعي.

لذلك يصبح السؤال, كيفية كتابة شكرا العميل أن) لا يموت أو ب) يموت برشاقة واغلاق انها الدورة في هذه العملية ؟

تحرير:الترقية إلى النسخة المقبلة من شكرا تحل هذه.أيضا لدينا التطبيق واحد القيام إرسال واستقبال ، لكنه لم يكن threadsafe - حتى لو كان تلقى في حين أنه كان يحاول أن يرسل هذا تسبب في تعطل.نعيد كتابته عن اثنين من تطبيقات وحدة التحكم, الذي أرسل البيانات أن البيانات الواردة.لا مزيد من حوادث.أيضا الإصدار الأقدم من شكرا كنا نستخدم في ذلك الوقت لم يكن التعامل مع حوادث بأمان ، الترقية إلى 4.x حل ذلك.

نصائح أخرى

كنت تشير التقارير إلى المستخدم المنتدى جنبا إلى جنب مع ربما رفع دعم القضية كما أن هذا يبدو وكأنه يمكن أن يكون بعض المسألة مع NMS رمز العميل و كل NMS المطورين على أن القائمة قد تستجيب

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