إزالة الرسالة من قائمة الانتظار فقط إذا قام المستخدم ببعض العمليات

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

  •  21-09-2019
  •  | 
  •  

سؤال

لدينا تطبيق MVC الذي يقرأ البيانات من MSMQ. نحاول اكتشاف طريقة لقراءة الرسالة من قائمة الانتظار وإزالتها من قائمة الانتظار فقط إذا قام المستخدم بعملية ناجحة في قائمة الانتظار. يجب أن تبقى الرسالة في قائمة الانتظار حتى يكمل المستخدم المعالجة ، يجب ألا تكون الرسالة متاحة لأي شخص آخر حتى ينهي المستخدم الذي يعالج كائن الرسالة العملية.

هل هناك خاصية لكائن رسالة يتم تعيينها على أنها نظرة خاطفة لن تسمح بقراءة هذه الرسالة مرة أخرى حتى يتم إعادتها إلى قائمة الانتظار أو إزالتها من قائمة الانتظار؟

نحن لسنا متأكدين مما إذا كان استخدام MSMQ فكرة جيدة في هذه الحالة؟

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

المحلول

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

تحتوي مقالة MSDN هذه على نظرة عامة جيدة على أنماط الاستخدام للرسائل الموثوقة مع MSMQ:

http://msdn.microsoft.com/en-us/library/ms978430.aspx

نصائح أخرى

قائمة الانتظار هي الفكرة الصحيحة. إن نهجك في "اترك الأمر في قائمة الانتظار ، مغلق ، ولكن لا يزال من غير المتوفر" خطأ.

قد تحتاج إلى قوائم انتظار متعددة.

  1. معالجة شيء ما في قائمة الانتظار 1

  2. عملية B dequeues من قائمة الانتظار 1 وتبدأ العمل.

    • إذا كان B ناجحًا ، فهذا كل شيء.

    • خلاف ذلك ، يتم قائمة الانتظار في مكان آخر (ربما نفس قائمة الانتظار ، أو ربما قائمة الانتظار 2) لصالح أعمال المتابعة.

إذا عاد إلى قائمة الانتظار 1 ، فسيجد B مرة أخرى ، في النهاية. إذا ذهبت إلى قائمة انتظار أخرى ، فإن عملية أخرى تقوم بالتنظيف أو التسجيل أو إصلاح الأخطاء أو أي شيء ، ربما يعيد شيء في قائمة الانتظار 1.

قائمة الانتظار ليست قاعدة بيانات - لا يوجد شيء مفيد (لا "لا تنظر إلي ، فأنا معالجتها").

قائمة الانتظار هي تخزين عابر. شخص ما يكتب ، يقرأ شخص آخر ، وهذا كل شيء.


إذا كنت تريد الموثوقية ، اقرأ هذا: http://msdn.microsoft.com/en-us/library/ms978430.aspx

وهذا: http://blogs.msdn.com/shycohen/archive/2006/02/20/535717.aspx

وهذا: http://www.request-response.com/blog/permalink،guid،03fb0e40-b446-42b5-ad90-3be9b0260cb5.aspx

الموثوقية هي ميزة في قائمة الانتظار ، وليس تطبيقك. يمكنك أن تفعل "قراءة قابلة للاسترداد". إنها معاملة جزء من واجهة برمجة تطبيقات قائمة الانتظار.

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