6. 6. 3. مثال آخرین مقدار صف

ساخت وبلاگ

این مثال نحوه ایجاد و استفاده از یک صف آخرین مقدار را نشان می دهد. اتصال زبان و جزئیات برنامه نویسی بین زبانها متفاوت است ، اما اصول یکسان هستند.

ما یک صف پیام رسانی ایجاد خواهیم کرد که به روزرسانی های منظم قیمت سهام را ارائه می دهد. مصرف کنندگان پیام به قیمت سهام فعلی علاقه مند هستند و آرزو نمی کنند یا نیازی به دریافت پیام با اطلاعات تاریخی ندارند. آخرین صف برای این برنامه مناسب است: پیام های تازه وارد می توانند پیام های قدیمی تر را به روز و جایگزین کنند.

ما صف خود را "سهامدار" می نامیم. صف ما از سهام ما از "Symbol" به عنوان آخرین کلید Queue استفاده می کند. مقدار این کلید در عنوان پیام پیام را به عنوان یک پیام جدید به صف یا به روزرسانی پیام قبلاً در صف شناسایی می کند.

ابتدا کتابخانه مشتری پیام رسانی QPID را وارد می کنیم: پیتون

واردات سیستم از qpid. messaging *

اکنون ما به کارگزار که در پورت استاندارد AMQP ، 5672 ، در دستگاه محلی اجرا می شود ، ایجاد می کنیم:

پیتون

اتصال = اتصال ("localhost: 5672") connection. open ()

و اکنون ما از این اتصال برای ایجاد یک جلسه استفاده می کنیم: پیتون

جلسه = Connection. Session ()

اکنون ما یک فرستنده ایجاد می کنیم و همزمان یک صف آخرین ارزش را اعلام می کنیم. ما یک صف به نام "سهامدار" ایجاد خواهیم کرد و از "Symbol Symbol" به عنوان آخرین کلید Queue استفاده می کنیم. پیام های ارسال شده به این صف ، با مشخص کردن همان "نماد سهام" در هدرهای خود ، خود را به روزرسانی در پیام قبلی می دانند.

عبارت زیر یک خط کد واحد است. ممکن است خطوط نمایش داده شود ، اما باید به عنوان یک خط واحد وارد شود.

پیتون

stockSender = session.sender("stock-ticker;>>>")

Sidenote: ما همچنین می توانیم با استفاده از ابزار خط فرمان QPID-Config صف را ایجاد کنیم:

qpid-config queue stock-ticker-argument qpid. last_value_queue_key = سهام

حال بیایید چند پیام را به صف بسازیم و ارسال کنیم. ما از کلید "سهام نماد" در عنوان استفاده می کنیم تا مشخص کنیم کدام یک از پیام ها را توصیف می کند. آخرین صف ما از این کلید هدر استفاده می کند تا پیام ما را با پیام های موجود در صف مطابقت دهد.

پیتون msg1 = پیام ("10") msg1. properties = msg2 = پیام ("10") msg2. properties = msg3 = پیام ("10") msg3. properties = msg4 = پیام ("12") msg4. properties =

پس از ارسال این پیام ها به صف آخرین ارزش ما ، مصرف کننده جدید باید سه پیام را در صف مشاهده کند ، یکی برای هر نماد سهام ، با MSG4 MSG1 را به روز می کند. برای تضاد رفتار آخرین صف ارزش با یک صف استاندارد FIFO ، ما پیام های خود را به یک صف کنترل می فرستیم ، به نام Control-Queue همزمان:

پیتون

controlSender = session.sender("control-queue;>")

اکنون پیام های خود را به دو صف ارسال می کنیم: پیتون

Stocksender. Send (MSG1) ControlSender. Send (MSG1) Stocksender. Send (MSG2) Controlsender. Send (MSG2) Stocksender. Send (MSG3) ControlSender. Send (MSG3) Stocksender. send (MSG4) ControlSender. send (MSG4)

پیام های ما اکنون در صف ها هستند. ما دو گیرنده ایجاد می کنیم تا اکنون محتوای صف ها را بررسی کنیم:

پیتون

StockBrowser = Session. Receiver ("سهام-Ticker ؛") ControlBrowser = Session. Receiver ("کنترل-کیو ؛")

این گیرنده ها در حال مرور هستند ، بنابراین آنها پیام به دست نمی آورند و آنها را از صف حذف می کنند. برای پاک کردن صف ها ، املاک مرور را از اعلامیه های گیرنده حذف کنید ، مانند SO: Session. Receiver ("سهامدار") و دوباره نسخه ی نمایشی را اجرا کنید. با مرور گیرنده ها ، شما می توانید با اجرای نسخه ی نمایشی چندین بار پشت سر هم بدون پاک کردن صف ها ، اثر یک صف آخرین ارزش را با گذشت زمان مشاهده کنید.

ما از قابلیت پیش تنظیم گیرنده ها برای مرور پیام های موجود در صف استفاده خواهیم کرد و به ما این امکان را می دهیم که با استفاده از روش () موجود ، تعداد پیام ها را در صف حساب کنیم. ما این کار را با تنظیم ظرفیت پیش تنظیم گیرنده ها به مقدار بالاتر از پیش فرض 0 انجام می دهیم:

پیتون

Stockbrowser. Capacity = 20 ControlBrowser. Capacity = 20

پس از تنظیم ظرفیت پیش تنظیم گیرنده روی 20 ، حداکثر 20 پیام موجود به صورت ناهمزمان از صف بازیابی می شود. از آنجا که این عمل ناهمزمان است ، ما باید منتظر تکمیل آن باشیم. ما برنامه خود را برای 10 ثانیه قبل از بررسی پیام های پیش تنظیم شده قرار خواهیم داد:

پیتون

خواب 10

ما باید از کتابخانه زمان خواب را وارد کنیم: پیتون

از زمان وارد کردن خواب

توجه داشته باشید که ما این کار را انجام می دهیم تا ویژگی موجود () گیرنده را با اطمینان بررسی کنیم که این تعداد پیام های موجود در صف را نشان می دهد. هنگام کار به صورت ناهمزمان در دسترس () تعداد پیام های موجود در محلی را گزارش می کند. پس از ده تاخیر ده ثانیه ای ، می توانیم به طور منطقی مطمئن باشیم که این تعداد پیام های موجود در صف است. در یک عملیات ناهمزمان واقعی نمی خواهید اجرای برنامه خود را مسدود کنید. در عوض شما از الگویی مانند این استفاده می کنید:

پیتون

در حالی که درست است: سعی کنید: msg = StockBrowser. fetch (زمان = 10) چاپ msg. properties ["سهام-نماد"] + ":" + msg. content به جز خالی: BREAK

هنگامی که برنامه ما چرخه خواب خود را به پایان رساند ، تعداد پیام های موجود در صف را بررسی خواهیم کرد و آنها را چاپ خواهیم کرد:

پیتون

چاپ "آخرین مقدار صف دارای" + str (StockBrowser. Available ()) + "پیام" چاپ " nlast پیام های صف:" برای X در محدوده (StockBrowser. Available ()): سعی کنید: msg = StockBrowser. fetch (TIMOUT OUTOUT= 1) چاپ msg. properties ["سهام-symbol"] + ":" + msg. content به جز پیام رسانی ، م: چاپ چاپ "صف کنترل" + str (controlbrowser. available ()) + "پیام" چاپ ""پیام های صف ncontrol: "برای X در محدوده (ControlBrowser. Available ()): سعی کنید: msg = controlbrowser. fetch (Timeout = 1) چاپ msg. properties [" سهام-symbol "] +": " + msg. content به جز پیام رسانی ererror، م: پاس

و سرانجام جلسه خود را تصدیق می کنیم و ارتباط را می بندیم: پیتون

Session. ackNowledge () اتصال. close ()

ما اکنون آماده اجرای آزمون خود هستیم. در اینجا لیست برنامه کامل وجود دارد: پیتون

import sys from qpid.messaging import * from time import sleep connection = Connection("localhost:5672") try: connection.open() session = connection.session() stockSender = session.sender("stock-ticker;>>>") controlSender = session.sender("control-queue;>") StockBrowser = Session. Receiver (" سهام-Ticker ؛ ") ControlBrowser = Session. Receiver (" Control-Queue ؛ ") ControlBrowser = Session. Receiver (" Control-Quee ") MSG1 = پیام (" 10 ") MSG1. Properties = msg2 = پیام ("10") msg2. properties = msg3 = پیام ("10") msg3. properties = msg4 = پیام ("12") msg4. properties = Stocksender. Stocksender. send (msg2) controlsender. send (msg2) stocksender. send (msg3) controlsender. send (msg3) Stocksender. send (msg4) controlsender. send (msg4) Stockbrowser. capacity = 20 Controlbrowser. Capacity = 20 SLEEP (10)چاپ " nlast مقدار صف دارای" + str (sockbrowser. available ()) + "پیام" چاپ "پیام های صف آخرین ارزش:" برای x در محدوده (sockbrowser. available ()): سعی کنید: msg = sockbrowser. fetch (Timeout= 1) چاپ msg. properties ["سهام-symbol"] + ":" + msg. content به جز پیام رسانی ، م: چاپ چاپ " ncontrol دارای" + str (controlbrowser. ovailable ()) + "پیام" چاپ ""پیام های صف کنترل: "برای X در محدوده (ControlBrowser. Available ()): سعی کنید: msg = controlbrowser. fetch (Timeout = 1) چاپ msg. properties [" سهام-symbol "] +": " + msg. content به جز پیام رسانی ارشاد، M: Pass Session. ackNowledge () به جز پیام رسانی ، M: چاپ M در نهایت: Connection. Close ()
استراتژی ترید...
ما را در سایت استراتژی ترید دنبال می کنید

برچسب : نویسنده : مرجان شیرمحمدی بازدید : 30 تاريخ : جمعه 10 شهريور 1402 ساعت: 0:51