Ziņojumu rinda

Ziņojumu rinda () jeb ziņojumu rindošanas sistēma ir programminženierijas komponente, ko izmanto starpprocesu komunikācijai  vai starppavedienu saziņai tajā pašā procesā. Tā nodrošina asinhronas saziņas protokolu, kurā ziņojumu sūtītājam un saņēmējam nav nepieciešams vienlaicīgi mijiedarboties — ziņojumi tiek turēti rindā, līdz adresāts tos iegūst.
Ziņojumu rindas tiek izmantotas operētājsistēmās vai lietojumprogrammās, lai programmas varētu savstarpēji sazināties. Tās var izmantot arī ziņojumu nodošanai starp datorsistēmām.

Ziņojumu rindas paradigma ir līdzīga “publicēšana — abonēšana” modelim, un tā parasti ir daļa no lielākas uz ziņojumiem orientētas starpprogrammatūras sistēmas. Vairums ziņojumapmaiņas sistēmu savā lietojumprogrammas saskarnē (API) atbalsta gan ziņojumu rindas, gan “publicēšana — abonēšana” modeļus, piemēram, Java Message Service (JMS).

Pārskats 
Ziņojumu rindas nodrošina asinhrono sakaru protokolu, kas nozīmē, ka ziņojuma sūtītājam un saņēmējam vienlaikus nav jāmijiedarbojas ar ziņojumu rindu. Ziņojumi, kas atrodas rindā, tiek saglabāti, līdz adresāts tos iegūst. Ziņojumu rindām ir netieši vai skaidri ierobežojumi attiecībā uz datu apjomu, ko var pārraidīt vienā ziņojumā, un uz ziņojumu skaitu, kas var palikt neizpildīti rindā.

Daudzas ziņojumu rindu realizācijas funkcionē iekšēji: operētājsistēmā vai lietojumprogrammā. Šādas rindas pastāv tikai šīs sistēmas vajadzībām.

Citas realizācijas ļauj nosūtīt ziņojumus starp dažādām datorsistēmām, potenciāli savienojot vairākas lietojumprogrammas un vairākas operētājsistēmas. Šīs ziņojumu rindošanas sistēmas parasti nodrošina uzlabotu elastīguma funkcionalitāti, lai nodrošinātu, ka ziņojumi sistēmas kļūmes gadījumā netiek “zaudēti”.

Ziņojumu rindas realizācija var būt kā īpašniekprogrammatūra, atvērtā pirmkoda programmatūra, aparatūras risinājums vai kā pakalpojums.
Īpašniekprogrammatūrai ir visgarākā vēsture, un tāda ir, piemēram, IBM MQ; ir produkti, kas saistīti ar noteiktām operētājsistēmām, piemēram, Microsoft Message Queuing.

Ziņojumu rindas komerciālas programmatūras piemēri ir IBM MQ un Oracle Advanced Queuing (AQ). Pastāv Java standarts Java Message Service, kam ir vairākas maksas un bezmaksas programmatūras realizācijas.

Ir daudzas atvērtā pirmkoda uz ziņojumiem orientētas starpprogrammatūras sistēmas, piemēram, Apache ActiveMQ, Apache Kafka, Apache Qpid, Apache RocketMQ, Beanstalkd, Enduro/X, HTTPSQS, JBoss Messaging, JORAM, RabbitMQ, Sun Open Message Queue un Tarantool.

Eksistē arī uz aparatūras bāzes veidotas ziņojumu apmaiņas sistēmas, kur programmatūra ir ierakstīta pusvadītāju atmiņā. Tādas ierīces piegādā, piemēram, Solace, Apigee un Tervela. IBM arī ierīcēm piedāvā savu MQ programmatūru.

Arvien populārākas kļūst mākoņdatošanas ziņojumu rindu pakalpojumu iespējas, piemēram, Amazon Simple Queue Service, StormMQ un IronMQ.

Lielākā daļa reāllaika operētājsistēmu (RLOS), piemēram, VxWorks un QNX, veicina ziņojumu rindošanas izmantošanu kā primāro starpprocesu vai starppavedienu saziņas mehānismu. No tā izrietošā ciešā integrācija starp ziņojumu apmaiņu un centrālā procesora plānošanu tiek uzskatīta par galveno iemeslu RLOS izmantojamībai reāllaika lietojumprogrammās. Erlang programmēšanas valoda izmanto procesus, lai nodrošinātu vienlaicīgumu; šie procesi sazinās asinhroni, izmantojot ziņojumu rindošanu.

Izmantošana 
Tipiskā ziņojumu rindošanas sistēmas realizācijā sistēmas administrators uzstāda un konfigurē ziņojumu rindošanas programmatūru un definē nosaukto ziņojumu rindu.
Pēc tam lietojumprogramma reģistrē programmatūras rutīnu, kas “klausās” ziņojumus, kas tiek ievietoti rindā.

Sekundārās un citas lietojumprogrammas var izveidot savienojumu ar rindu un pārsūtīt ziņojumu uz to.

Rindas pārvaldības programmatūra saglabā ziņojumus, līdz saņemošā programma izveido savienojumu un pēc tam izsauc reģistrēto programmatūras rutīnu. Pēc tam saņemošā lietojumprogramma apstrādā ziņojumu atbilstošā veidā.

Faktori, kas var būtiski ietekmēt transakcijas semantiku, sistēmas uzticamību un sistēmas efektivitāti:
 Ilgmūžība — ziņojumi var tikt glabāti atmiņā, rakstīti diskā vai pat nodoti datubāzes pārvaldības sistēmā, ja uzticamības nepieciešamība liecina par resursu ietilpīgāku risinājumu
 Drošības politika — nosaka, kurām lietojumprogrammām ļaut piekļuvei šiem ziņojumiem
 Ziņojumu tīrīšanas politika — rindām vai ziņojumiem var būt dzīvlaiks
 Ziņojumu filtrēšana — dažas sistēmas atbalsta datu filtrēšanu, lai abonents varētu skatīt tikai tos ziņojumus, kas atbilst dažiem iepriekš noteiktiem kritērijiem
 Piegādes politika — nosaka, vai ir jāgarantē, ka ziņojums tiek piegādāts vismaz vienu reizi, tieši vienu reizi vai arī ne vairāk kā vienu reizi
 Maršrutēšanas politika — sistēmā ar daudziem rindu serveriem nosaka, kuros serveros ir jāsaņem ziņojums vai rindas ziņojumi
 Paketēšanas politika — nosaka, ka ziņa jānogādā nekavējoties, vai arī sistēmai vajadzētu mazliet pagaidīt un mēģināt vienā reizē nogādāt daudzus ziņojumus
 Rindošanas kritērijs — nosaka, kad ziņojums ir jāuzskata par “ieliktu rindā”. Kad tas ir vienā rindā? Vai tad, kad tas ir pārsūtīts uz vismaz vienu attālo rindu? Vai uz visām rindām?
 Paziņojums par saņemšanu — izdevējam, iespējams, ir jāzina, kad daži vai visi abonenti ir saņēmuši ziņojumu.

Standarti un protokoli 
Vēsturiski ziņojumu rindošanā tika izmantoti īpašnieka, slēgti protokoli, kas ierobežoja dažādu operētājsistēmu vai programmēšanas valodu spēju mijiedarboties heterogēnās vidēs.

Agrīns mēģinājums padarīt ziņojumu rindošanu sakārtotāku bija Sun Microsystems JMS specifikācija, kas nodrošināja tikai Java klienta API abstrakciju. Tas ļāva Java izstrādātājiem pārslēgties starp ziņojumu rindošanas nodrošinātājiem līdzīgi kā izmantojot SQL datu bāzes. Praksē, ņemot vērā rindošanas metožu un scenāriju dažādību, tas ne vienmēr bija tik praktisks, kā varētu būt.

Daži populārākie standarti, ko izmanto atvērtā pirmkoda ziņojumu rindas realizācijā:
 Advanced Message Queuing Protocol (AMQP) – iespējām bagāts ziņojumu rindas protokols, kas 2014. gada aprīlī apstiprināts kā ISO/IEC 19464
 Streaming Text Oriented Messaging Protocol (STOMP) — vienkāršs, uz tekstu orientētu ziņojumu protokols

Šie protokoli darbojas tādā pašā līmenī kā HTTP. Dažas īpašniekprogrammatūras realizācijas arī izmanto HTTP, lai nodrošinātu ziņojumu rindošanu, piemēram, Amazon SQS.

Atsauces