هل اللغز دعم التطبيق على شبكة الإنترنت نشر الرسائل و الاشتراك في رسالة

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

  •  21-12-2019
  •  | 
  •  

سؤال

أنا جديدة على اللغز.هناك سؤال أريد أن أسأل:

  1. انها فكرة جيدة لجعل التطبيق على شبكة الإنترنت نشر رسالة الاشتراك في الرسالة.و هل اللغز دعم هذه الميزات.

أنا اختبار وضع ملقم ومع ذلك فإنه لا يعمل.أنه يتعامل مع الرسالة رسالة واحدة فقط(من pubsubsample.websubscriber1.انتظار الإدخال) عندما ويب يبدأ التطبيق.

راجع للشغل,أنه يعمل بشكل جيد على وضع العميل.(إرسال الرسالة فقط)

هنا هو بلدي مقطع التعليمات البرمجية الملقم mode:

 public class CheckStatus : IHandleMessages<NewTradeRecorded>
{
    readonly IBus bus;

    public CheckStatus(IBus bus)
    {
        this.bus = bus;
    }

    public void Handle(NewTradeRecorded message)
    {

    }
 }

Asp.net MVC

protected void Application_Start()
    {

        using (var adapter = new BuiltinContainerAdapter())
        {
            adapter.Register(() => new CheckStatus(adapter.Bus));

           Configure.With(adapter)
                   .Transport(t => t.UseMsmqAndGetInputQueueNameFromAppConfig())
                     .MessageOwnership(o => o.FromRebusConfigurationSection())
                     .CreateBus()
                     .Start();

           adapter.Bus.Subscribe<NewTradeRecorded>();

        }
    }

ويب.التكوين

<rebus  inputQueue="pubsubsample.websubscriber1.input" errorQueue="pubsubsample.websubscriber1.error" workers="1" maxRetries="5">
<endpoints>
  <add messages="Trading.Messages" endpoint="trading.input"/>
</endpoints>

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

المحلول

للإجابة على السؤال الأول ، إذا كان اللغز يدعم النشر والاشتراك من نفس العملية, الجواب هو نعم - لا يوجد تقنية سبب لماذا لا يمكنك الاشتراك في الرسائل ونشر نفس الرسائل من نفس العملية ، ويشمل ذلك تطبيق الويب الخاص بك.

إذا كنت يجب أن شيء آخر :)

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

ثم عندما يستيقظ لأن IIS برقيات طلب ويب إلى ذلك ، قد يكون 1,000,000 الأحداث في انتظار أن يتم التعامل معها من قبل التطبيق الخاص بك والتي سوف تأخذ الكثير من الوقت لمضغ من خلال.

في بعض الحالات, لقد سمعت من الناس الذين يريدون استخدام اللغز pub/sub في تطبيقات الويب للحفاظ على تحديث ذاكرة التخزين المؤقت في التطبيق على شبكة الإنترنت - ثم كان شديد القضايا تأتي من حقيقة أن يدعم IIS تداخل حالتين من نفس تطبيق ويب - iow فجأة لفترة قصيرة ، مثيلين من نفس ويب التطبيقات قيد التشغيل ، مما يسمح تطبيق ويب عن اغلاق لانتزاع بعض الأحداث التي ينبغي التعامل معها من قبل مثيل جديد.

لهذه الأسباب بشكل عام أنا لا ريكومينت القيام pub/sub في تطبيقات الويب.

لذلك ، لماذا لا pub/sub العمل?حسنا أول شيء:لا التصرف في حاوية محول فورا بعد إنشاء ذلك!:)

هل هذا بدلا من ذلك:

static readonly _stuffToDispose = new List<IDisposable>();

protected void Application_Start()
{
    var adapter = new BuiltinContainerAdapter();

    _stuffToDispose.Add(adapter);

    adapter.Register(() => new CheckStatus(adapter.Bus));

    Configure.With(adapter)
             .Transport(t => t.UseMsmqAndGetInputQueueNameFromAppConfig())
             .MessageOwnership(o => o.FromRebusConfigurationSection())
             .CreateBus()
             .Start();

    adapter.Bus.Subscribe<NewTradeRecorded>();
}

protected void Application_End()
{
    _stuffToDispose.ForEach(d => d.Dispose());
}

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

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