سؤال

وأنا بدأت للتو للعب مع حافلة nservice واسعى الى الحصول على نشر العمل. لدي المستمع الذي يبدو أنه يفتقد بعض الرسائل. تم تكوينه مع

 <MsmqTransportConfig
  InputQueue="InformMessages"
  ErrorQueue="error"
  NumberOfWorkerThreads="5"
  MaxRetries="5"
 />

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

class MessageHandler : IMessageHandler<ICourseRegister>
{
    public void Handle(ICourseRegister message)
    {
        Console.WriteLine("Message dun got gotted");
        Console.WriteLine("Course name is: " + message.CourseName);
    }

    private IBus bus;
    public IBus Bus
    {
        set { this.bus = value; }
    }
}

ويتم تكوين الحافلة مع

        var bus = NServiceBus.Configure.With()
              .SpringBuilder()
              .XmlSerializer()
              .MsmqTransport()
                  .IsTransactional(true)
                  .PurgeOnStartup(false)
              .UnicastBus()
                  .ImpersonateSender(false)
                  .LoadMessageHandlers()
              .CreateBus()
              .Start();

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

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

المحلول

وبعد أن نلقي نظرة على الحل الذي أرسلت أكثر، أرى ما هي المشكلة.

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

وأعط كل عملية قائمة انتظار الإدخال الخاصة به وكل شيء يجب أن يكون على حق مع العالم: -)

نصائح أخرى

إذا كنت تعمل مماثلة لعينة حانة / الفرعية، ما يمكن أن تكون رؤية هو "اشتراكات متعددة الأشكال".

في الحانة / عينة فرعية، الناشر ينشر بالتناوب واجهة IEvent وEventMessage فئة محددة (الذي يرث IEvent).

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

والاشتراكات متعددة الأشكال وتعمل العكس. إذا قمت بالاشتراك في القاعدة، أي فئة فرعية التي تنشر الناشر سيصل.

وهذا لا علاقة له مع خيوط شيئا.

وعلى أمل أن يساعد.

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