هل يجب علي استخدام MSMQ أو SQL Service Broker لإجراء المعاملات؟

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

سؤال

لقد طلب مني قائد فريقي التحقيق في MSMQ كخيار للإصدار الجديد من منتجنا.نحن نستخدم SQL Service Broker في نسختنا الحالية.لقد قمت بنصيبي العادل من التجارب والبحث على Google للعثور على المنتج الأفضل الذي يلبي احتياجاتي، لكنني فكرت في أن أطلب من أفضل موقع أعرفه الحصول على إجابات برمجية.

بعض التفاصيل:

  • عميلنا هو كود .NET 1.1 و2.0؛هذا هو المكان الذي سيتم إرسال الرسالة منه.
  • الهدف في مثيل SQL Server 2005.جميع الرسائل في نهاية المطاف هي تحديثات أو إدراجات لقاعدة البيانات.
  • سنرسل العديد من التحديثات التي يجب التعامل معها على أنها معاملة.
  • يجب أن يكون لدينا إمكانية استرداد الرسائل بشكل مثالي؛لا يمكن أن تضيع أي رسائل.
  • يجب أن نكون غير متزامنين وقادرين على قبول الرسائل حتى عندما يكون خادم SQL المستهدف معطلاً.
  • إن تطوير حل قائمة الانتظار الخاص بنا ليس خيارًا؛نحن فريق صغير.

الأشياء التي اكتشفتها حتى الآن:

  • يمكن لكل من MSMQ وSQL Service Broker القيام بهذه المهمة.
  • يبدو أن وسيط الخدمة أسرع بالنسبة لرسائل المعاملات.
  • يتطلب Service Broker وجود خادم SQL يعمل في مكان ما، بينما يحتاج MSMQ إلى أي جهاز يعمل بنظام Windows تم تكوينه ويعمل في مكان ما.
  • يبدو أن MSMQ أفضل/أسرع/أسهل في الإعداد/التشغيل في مجموعات.

هل فاتني شيء؟هل هناك فائز واضح هنا؟سيكون موضع تقدير أي أفكار أو تجارب أو روابط.شكرًا لك!

يحرر:انتهى بنا الأمر إلى الالتزام بوسيط الخدمة لأن لدينا إطار عمل قاعدة بيانات مخصصًا يُستخدم في بعض أكواد عملائنا (نتعامل مع المعاملات بشكل أفضل).قام هذا الرمز بالتقاط SQL للمعاملات، ولكن ليس .كان رمز العميل أيضًا هو الإصدار 1.1 من .NET، لذلك يتعين علينا ترقية رمز العميل بالكامل.شكرا لمساعدتك!

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

المحلول

بعد أن قمت للتو بترحيل طلبي من Service Broker إلى MSMQ، يجب أن أصوت لاستخدام MSMQ.هناك العديد من العوامل التي يجب أخذها في الاعتبار، ولكن معظمها يتعلق بكيفية استخدامك لبياناتك ومكان المعالجة.

  • إذا تمت المعالجة في قاعدة البيانات؟ وسيط الخدمة
  • إذا كان مجرد نقل البيانات؟ وسيط الخدمة
  • هل تتم المعالجة في كود .NET/COM؟ MSMQ
  • هل تحتاج إلى معاملات موزعة عن بعد (على سبيل المثال، المعالجة في مربع مختلف عن SQL)؟ MSMQ
  • هل يجب أن تكون قادرًا على إرسال الرسائل عندما تكون الوجهة معطلة؟ MSMQ
  • هل تريد استخدام nServiceBus، وMassTransit، وRhino-ESB، وما إلى ذلك؟ MSMQ

الأشياء التي يجب مراعاتها بغض النظر عما تختاره

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

نصائح أخرى

لقد استخدمت MSMQ من قبل والعنصر الوحيد الذي أود إضافته إلى قائمتك هو التحقق من المتطلبات الأساسية للإصدار.لقد واجهت مشكلة حيث كان أحد المواقع يحتوي على Win 2000 Server وبالتالي MSMQ v.2، مقابل Win 2003 Server وMSMQ v3.استهدفت جميع أكواد .NET الخاصة بي الإصدار 3 وهي غير متوافقة...أو على الأقل ليس بهذه السهولة.

مجرد اعتبار إذا ذهبت إلى مسار MSMQ.

لقد أدى تقييد حجم الرسالة في MSMQ إلى إيقاف عملية الحفر في هذا الاتجاه.أنا أتعلم وسيط الخدمة للمشروع.

هل يجب أن تكون قادرًا على إرسال الرسائل عندما تكون الوجهة معطلة؟MSMQ

لا أفهم لماذا؟يمكن لـ SSB إرسال رسائل إلى وجهة غير متصلة دون أي مشكلة.ستنتقل كل هذه الرسائل إلى قائمة انتظار الإرسال وسيتم تسليمها عندما تظل الوجهة قابلة للوصول.

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