Кіріспе

Бағдарламалық жасақтауда процестер аралық байланыс құралдары

Компьютерлік ғылымда хабар кезектері мен пошта жәшіктері – процестер аралық байланыс (IPC) немесе бір процесс ішіндегі талдамдар аралық байланыс үшін қолданылатын бағдарламалық жасақтама компоненттері. Олар хабар алмасу үшін кезек жүйесін пайдаланады – басқаруды немесе мазмұнды жіберуді. Топтық байланыс жүйелері ұқсас мүмкіндіктерді ұсынады. Хабар кезектері парадигмасы – жариялаушы/жазылушы үлгісімен туыс, және әдетте ірі хабарға бағытталған делдалдық бағдарламалық жасақтама жүйесінің бір бөлігі болып табылады. Көптеген хабарлама жүйелері API-де жариялаушы/жазылушы және хабар кезектері модельдерін қолдайды, мысалы Java Message Service (JMS).

Өкілеттілік және меншік құқығы

Хабар кезегі екі немесе одан көп процестер/жіптер арасында асинхронды байланыс үлгісін жүзеге асырады, онда хабарды жіберуші және қабылдаушы тараптар хабар кезегімен бір уақытта өзара әрекеттесуге қатыспайды. Кезекке қойылған хабарламалар алушы оларды алғанға дейін сақталады. Хабар кезегінде бір хабарламада берілуі мүмкін дерек көлеміне және кезекте күтіп тұрған хабарламалар санына қатысты нақты немесе жасырын шектеулер болады.

Жөнелту

Хабарлар кезегінің көптеген іске асырылуы операциялық жүйеде немесе қолданба ішінде ішкі түрде жұмыс істейді. Мұндай кезектер тек сол жүйе үшін ғана қолданылады. Басқа іске асырылулар әртүрлі компьютерлік жүйелер арасында хабар алмасуға мүмкіндік береді, соның салдарынан бірнеше қолданбалар мен операциялық жүйелерді байланыстыруға болады. Бұл хабарлар кезегіне қою жүйелері, жүйелік қателіктер кезінде хабарламалардың "жоғалып кетпеуін" қамтамасыз ету үшін, тұрақтылық функциясын ұсынады. Осы типтегі хабарлар кезегін орнату бағдарламалық жасақтамасының (сонымен қатар хабарға бағытталған делдалдық бағдарлама деп те аталады) коммерциялық іске асырылу мысалдары IBM MQ (бұрынғы MQ Series) және Oracle Advanced Queuing (AQ) болып табылады. Java Message Service деп аталатын Java стандарты бар, оның бірнеше меншік және ақысыз бағдарламалық жасақтамалары бар. VxWorks және QNX сияқты нақты уақыт операциялық жүйелері (RTOS) хабарлар кезегін процестер арасындағы немесе жіптер арасындағы негізгі байланыс механизмі ретінде пайдалануға ынталандырады. Бұл хабар алмасу мен процессорды жоспарлау арасында интеграцияға алып келуі мүмкін. Коммерциялық RTOS-тің алғашқы мысалдары, жіптер арасындағы байланысты хабар кезегі негізінде құруға мүмкіндік берген VRTX және pSOS+ сияқты, екеуі де 1980-жылдардың басына жатады. Эрланг бағдарламалау тілі қатарлылықты қамтамасыз ету үшін процестерді пайдаланады; бұл процестер хабарлар кезегін пайдалану арқылы асинхронды түрде байланысады.

Меншік

Хабар кезегі бағдарламалық жасақтамасы меншік, ашық кодты немесе екеуінің қосындысы болуы мүмкін. Ол жеке серверлерде немесе сыртқы бұлтты серверлерде (хабарларды кезектің қызметі) іске қосылады. Меншік нұсқалардың тарихы ең ұзақ, және оларға хабарламаларды кезектің бастапқы кезеңдерінен бері қолданылып келе жатқан IBM MQ сияқты өнімдер, сондай-ақ Microsoft Message Queuing (MSMQ) сияқты нақты операциялық жүйелерге байланысты өнімдер кіреді. Бұлтты қызмет провайдерлері де Amazon Simple Queue Service (SQS), StormMQ, Solace және IBM MQ сияқты меншік шешімдерін ұсынады. Хабар алмасу орталық бағдарламалық жасақтамасының ашық кодты нұсқаларына Apache ActiveMQ, Apache Kafka, Apache Qpid, Apache RocketMQ, Enduro/X, JBoss Messaging, JORAM, RabbitMQ, Sun Open Message Queue және Tarantool кіреді. Аппараттық құралға негізделген хабар алмасу орталықтарын ұсынатын компаниялардың мысалдары: Solace, Apigee және IBM MQ.

Синхронды және асинхронды

Қолданыстағы кеңінен танымал байланыс протоколдарының көпшілігі синхронды жұмыс істейді. HTTP протоколы – Дүниежүзілік Желіде және веб-қызметтерде – пайдаланушы веб-бетке сұрау жібереді де, жауап күтеді. Дегенмен, синхронды мінез-құлыққа қажеттілік туырмайтын жағдайлар да бар. Мысалы, AJAX (асинхронды JavaScript және XML) мәтін, JSON немесе XML хабарламаларын веб-беттің бір бөлігін жаңарып, көбірек қатысты ақпаратпен толықтыру үшін асинхронды түрде жіберуге мүмкіндік береді. Google осы тәсілді өзінің Google Suggest іздеу мүмкіндігі үшін қолданады, ол пайдаланушының жартылай терілген сұрауларын Google серверлеріне жіберіп, пайдаланушы теру процесінде қызығушылық танытатын толық сұраулардың тізімін қайтарады. Бұл тізім пайдаланушы теріп жатқанда асинхронды түрде жаңартылады. Оқиға туралы хабарлау жүйелері мен жариялау/жазылу жүйелерінде де асинхронды мысалдар көп. Бір қосымша басқасына оқиға болғанын хабарлауы мүмкін, бірақ жауап күтудің қажеті жоқ. Жариялау/жазылу жүйелерінде қосымша кез келген клиенттерге оқу үшін ақпаратты «жариялайды». Жоғарыдағы мысалдардың екеуінде де, мысалы, алушылардың бірі құлап кетсе, ақпаратты жіберушінің күтуі дұрыс болмас еді. Қосымшалар тек синхронды немесе асинхронды болуы міндетті емес. Интерактивті қосымша сұраудың кейбір бөліктеріне дереу жауап беруі мүмкін (мысалы, клиентке сату сұранысы қабылданғанын хабарлау және қордан алуға уәде беру), ал басқа бөліктерін кейінірек орындалуы үшін кезекке қоюы мүмкін (мысалы, есеп айырысуды аяқтау, деректерді орталық есеп жүйесіне жіберу және басқа да түрлі қызметтерді шақыру). Мұндай жағдайлардың барлығында, хабар кезегін іске асыратын (немесе басқаша айтқанда, хабар тарату жүйесі) ішкі жүйеге ие болу жалпы жүйенің жұмысын жақсартуға көмектеседі.

UNIX-те іске асыру

UNIX жүйесінде екі кең таралған хабарлама кезегінің нұсқасы бар. Біреуі SYS V API құрамына кіреді, екіншісі POSIX құрамына кіреді.

SYS V

UNIX SYS V сілтемелі тізімдердің массивін хабарлама кезегі ретінде сақтап, хабар алмасуды іске асырады. Әрбір хабарлама кезегі массивідегі индексімен анықталады және бірегей дескрипторы болады. Белгілі бір индекске бірнеше дескриптор сәйкес келуі мүмкін. UNIX хабар алмасу мүмкіндігіне қол жеткізу үшін стандартты функцияларды ұсынады. msgget Бұл жүйелік шақыру кілтті аргумент ретінде қабылдайды және егер ол болса, сәйкес кілтті кезек дескрипторымен қайтарады. Егер ол болмаса және IPC CREAT туы қойылған болса, берілген кілтпен жаңа хабарлама кезегін жасайды және оның дескрипторын қайтарады. msgrcv Белгілі бір кезек дескрипторынан хабар алу үшін қолданылады. Шақырушы процесі кезекке оқу рұқсатына ие болуы керек. Оның екі түрі бар: Бұғаттау арқылы алу, егер сұралған хабарлама түрі табылмайтын болса, процесті күту режиміне жібереді. Ол кезекке жаңа хабарлама келгенше күтеді, содан кейін қайтадан тексеру үшін оянады. Бұғаттаусыз алу дереу шақырушыға қайтарады және операция сәтсіз аяқталғанын хабарлайды. msgctl Иесі сияқты хабарлама кезегінің параметрлерін өзгерту үшін қолданылады. Ең маңыздысы, IPC RMID туын жіберіп, хабарлама кезегін жою үшін қолданылады. Хабарлама кезегін жасаушысы, иесі немесе супер пайдаланушы ғана жоюға құқылы.

POSIX

POSIX.1 2001 хабарлама кезегі API екі UNIX хабарлама кезегі API-сінің кейінгісі болып табылады. Ол SYS V API-ден өзгеше, бірақ осыған ұқсас мүмкіндіктерді ұсынады. Unix man page mq overview(7) POSIX хабарлама кезегінің жалпы сипаттамасын береді.

Графикалық пайдаланушы интерфейстері

Графикалық пайдаланушы интерфейстері (GUI) хабарлама кезегін, сондай-ақ оқиға кезегін немесе енгізу кезегін пайдаланады, осы арқылы тышқанның басуы, пернетақта оқиғалары немесе басқа пайдаланушы енгізетін мәліметтер сияқты графикалық кіріс әрекеттерін қолданба бағдарламасына жібереді. Терезелік жүйе пайдаланушының немесе басқа оқиғалардың, мысалы таймер тіктеп тұрулары немесе басқа жіптер жіберген хабарламалар туралы хабарларды хабарлама кезегіне қояды. GUI қолданбасы осы оқиғаларды бірінен соң бірін «getNextEvent» немесе оқиға циклында осыған ұқсас процедураны шақырып алады, содан кейін осы оқиғаны өңдеу үшін тиісті қолданба процедурасын шақырады.