رفتن به مطلب

قابلیت Message Queuing در دات‌نت


Fahim

ارسال های توصیه شده

امین صفائی

 

اشاره: ابزار مخصوص صف کردن پیغام‌ها یا MQ (سرنام Message Queuing) ابزاری ارتباطی برای استفاده در برنامه‌های غیرمتمرکزي است که می‌خواهند از راه دور و با درجه اطمینان بالا با یکدیگر تبادل اطلاعات یا پیغام‌ انجام‌دهند. درحقیقت، صف یا Queue یک جعبه برای نگهداری پیغام برنامه است که از آن پیغام تا رسیدن به مقصد نگهداری می‌کند...

ابزار مخصوص صف کردن پیغام‌ها یا MQ (سرنام Message Queuing) ابزاری ارتباطی برای استفاده در برنامه‌های غیرمتمرکزي است که می‌خواهند از راه دور و با درجه اطمینان بالا با یکدیگر تبادل اطلاعات یا پیغام‌ انجام‌دهند. درحقیقت، صف یا Queue یک جعبه برای نگهداری پیغام برنامه است که از آن پیغام تا رسیدن به مقصد نگهداری می‌کند. در این روش یک برنامه پیغامی را در یک صف قرار می‌دهد که آن پیغام توسط برنامه‌ای دیگر دریافت و پردازش می‌شود. این روش برای برنامه‌هایی مفيد است که به صورت Asynchronous یا غیرهمزمان تبادل اطلاعات می‌کنند و در مقابل ارسال پیغام به عکس‌العمل فوري نيازي نيست. MQ و جدول اطلاعاتی در نگاه اول مانند یکدیگر هستند، اما تفاوت این دو در این است که Database Tableها به صورت متقارن (همزمان) يا Synchronously کار می‌کنند، اما MQها به‌صورت غیرهمزمان یا Asynchronous. پس هنگامي که به MQ اطلاعات ارسال می‌شود به گرفتن تأيیديه نیازی نیست، در نتیجه سرعت عملیات بسیار بالا خواهد رفت. درحقیقت، کلاینت در بانک اطلاعاتی باید صبر کند تا پردازش سرور به اتمام برسد، اما در MQ این‌گونه نخواهد بود. برنامه‌نویسی بدون ارتباط مداوم یا Connectionless از این صف‌ها به‌منظور نگهداری داده‌های ورودی برای سرور یا برنامه‌ای که باید با آن در ارتباط باشد، استفاده می‌کند. در این صف‌ها بر خلاف UDP که پیغام ارسال مي‌شود، صددرصد نمی‌توان مطمئن بود که پیغام خواهد رسید یا خير، اما با استفاده از MQ مطمئن خواهیم شد که اطلاعات ارسالی به مقصد رسیده است.

در عمل از MQ می‌توان در موارد زیر استفاده کرد:

- تبادل اطلاعات با کامپیوتر مرکزی زمانی که مدت پاسخ‌دهی مسئله مهمی نيست.

- هنگامي‌که پایگاه‌داده آنلاین نیست و می‌توان پیغام‌ها را درون صف‌ها جا داد و وقتی که پایگاه‌داده آنلاین شد، اطلاعات انتقال پیدا مي‌کنند.

- زمانی که پایگاه‌داده در حال کار است و می‌خواهیم پس از اتمام کار داده‌هایی را که بايد به‌صورت بي‌درنگ پردازش‌ شوند، پردازش کند.

- استفاده در Log های برنامه‌ها. به‌عنوان مثال، هنگامي که در برنامه پیغام اشکالی وجود دارد. نیازی نیست که برنامه در درون خود فایلی را بازکند و Log اشکال را در آن بنویسد. فقط کافی‌است آن پیغام را در صف قرار دهد.

 

انواع پیغام‌ها در MQ

کاربر در MQ به دو نوع پيغام دسترسي دارد: يکي صف‌های سیستم یا System Queue که توسط خود سیستم‌عامل برای انجام عملیات جاری سیستم استفاده می‌شوند و ديگري صف‌های خصوصی یاPrivate که توسط کاربر در ماشین‌های محلی تولید می‌شوند و باید در سرویس دایرکتوری رجيستر شوند. این صف‌های خصوصی به صورت آفلاین تولید یا حذف مي‌شوند و نمی‌توانند بدون آن‌که آدرس دقیق Path صف را داشته باشند با برنامه دیگری ارتباط برقرار کنند.

 

يک نمونه عملي

تصور کنید می‌خواهیم برنامه‌ای بنوسیم که از دو فرم تشکیل شده است. ممکن است این دو فرم در یک دستگاه نباشند، اما هر یک از این فرم‌ها باید بتواند پیغامی را که فرم دیگر ارسال می‌کند، دریافت کرده و نمایش‌دهند. برای این‌کار در#C یک فرم ایجاد می‌کنیم و سپس با ایجاد دو فرم به نام‌های Form1 وForm 2 در قسمتForm1 به سیستم اعلام می‌کنیم که اگر صف خصوصی به نام QueueExample وجود دارد آن را در متغیری قرار بدهد، در غیر این صورت آن را ایجاد کند. سپس فرم2 را ایجاد و نمایش می‌دهیم (فهرست1).

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

فهرست 1

 

در قسمت بعدی می‌خواهیم وقتی کاربر در فرم یک پیغام را ارسال کرد، پیغام متنی در صف ارسال شود. برای این‌کار همان‌طور که در فهرست2 مشخص شده، ابتدا یک شیء پیغام به نام mm تولید می‌کنیم وBody آن را متن کاربر قرار داده و به آن شماره پیغام را الصاق می‌کنیم .

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

فهرست 2

 

پس از آن پیغام را توسط متد Send ارسال می‌کنیم. حال برای مشاهده پیغام‌های در صف از متد Receive استفاده می‌کنیم و پیغام ارسال شده را دریافت می‌کنیم ( فهرست 3).

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

فهرست 3

 

نکته جالب توجه اين است که می‌توانیم از کدهای مشابه در Form 2 استفاده کنیم. به دلیل این‌که هر دو فرم از یک صف استفاده می‌کنند، پس خروجی یکسان خواهندداشت . چگونگی عملکرد سیستم در شکل 1 مشاهده می‌شود. همان گونه که ملاحظه می‌کنيد صف 1 یک پیغام را ارسال می کند و صف 2 به محض فشردن دکمه دریافت پیغام موجود را در صف 1 دریافت می‌کند.

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

شكل 1

 

همچنین مطابق شکل 2 اگر پیغــامی در سیستم وجود نداشته باشد، سیستم اعلام می‌کند که Message در صف نیست که نمایش دهد. اگر صف 2 نیز پیغامی را به صف ارسال کند صف 1 می‌تواند آن‌را مشاهده کند.

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

شكل 2

 

نکته قابل توجه این‌که وقتی پیغامی مانند Shabakeh Mag را در صف قرار می‌دهیم و آن‌را دریافت نمی‌کنیم، این پیغام در Queueexample قرار می‌گیرد. حتی اگر سیستم خاموش شود یا از برنامه خارج شویم. هر زمان برنامه‌ای آخرین پیغام مشاهده نشده آن صف را درخواست کند، پیغام مورد نظر از صف حذف خواهد شد. شکل 3 اطلاعات درون صف را که توسط برنامه‌ای درخواست نشده و همچنان درون صف است، نشان می‌دهد.

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

شكل 3

لینک به دیدگاه
×
×
  • اضافه کردن...