Ziņojumapmaiņas starpprogrammatūra

Atšķirības no citām starpprogrammatūras kategorijām

Ziņojumapmaiņas starpprogrammatūrai līdzīgas starpprocesu sakaru starpprogrammatūras kategorijas ir attālie procedūras izsaukumi (RPC) un objektu pieprasījuma  starpnieki (ORB). 
Visi šie modeļi ļauj vienam programmatūras komponentam ietekmēt cita komponenta darbību tīklā. Tās atšķiras ar to, ka RPC un ORB bāzēta starpprogrammatūra rada cieši saistītu komponentu sistēmas, bet MOM bāzētas sistēmas nodrošina komponentu vājāku sasaisti. RPC un ORB sistēmā, kad viena procedūra izsauc citu, ir jāgaida, līdz tiek atgriezta izsauktā procedūra, pirms tā var paveikt ko citu. Šajos sinhrono ziņojumapmaiņas modeļos starpprogrammatūra daļēji darbojas kā supersavienotājs, atrodot izsaukto procedūru tīklā un izmantojot tīkla pakalpojumus, lai nodotu funkcijas vai metodes parametrus procedūrai un pēc tam atgrieztu rezultātus.

Priekšrocības

Galvenie iemesli, kāpēc tiek izmantots uz ziņojumiem balstīts sakaru protokols, ir tā spēja saglabāt (buferis), maršrutēt vai transformēt ziņojumus, tos no sūtītājiem nogādājot saņēmējiem.
Vēl viena ziņapmaiņas nodrošinātāja priekšrocība ir tā, ka, pievienojot administratīvo interfeisu, var pārraudzīt un regulēt veiktspēju. Tādējādi klientu lietojumprogrammas tiek efektīvi atbrīvotas no visām problēmām, izņemot ziņojumu sūtīšanu, saņemšanu un apstrādi. Tādas problēmas kā sadarbspēja, uzticamība, drošība, mērogojamība un veiktspēja MOM sistēmā ir administratora ziņā.

Asinhroniskums

Izmantojot MOM sistēmu, klients veic lietojumprogrammas saskarnes (API) izsaukumu, lai sūtītu ziņojumu uz pakalpojumu sniedzēja pārvaldītu adresātu. Izsaukums lūdz pakalpojumu sniedzēju, lai tas maršrutētu un piegādātu ziņu. Kad ziņojums ir nosūtīts, klients var turpināt veikt citus darbus, pārliecībā, ka pakalpojumu sniedzējs saglabā ziņojumu, līdz saņemošais klients to iegūst. Uz ziņojumiem balstītais modelis kopā ar pakalpojuma sniedzēja starpniecību ļauj izveidot vaļīgi saistītu komponentu sistēmu.
Ziņojumapmaiņas starpprogrammatūra ietver dažādu lietojumprogrammu saziņas programmatūras kategoriju, kas parasti balstās uz asinhronas ziņojumu apmaiņas, nevis uz pieprasījumu un atbilžu arhitektūru. Asinhronās sistēmās ziņojumu rindas nodrošina pagaidu krātuvi, ja mērķa programma ir aizņemta vai nav savienojuma. Turklāt lielākā daļa asinhrono MOM sistēmu nodrošina pastāvīgu krātuvi ziņojumu rindas rezerves kopijai. Tas nozīmē, ka sūtītājam un saņēmējam nav nepieciešams vienlaikus izveidot savienojumu ar tīklu (asinhronā piegāde) un problēmas ar intermitējošo savienojamību ir atrisinātas. Tas nozīmē arī to, ka gadījumā, ja uztvērēja lietojumprogramma kāda iemesla dēļ nedarbojas, sūtītāji var turpināt neietekmēto darbību, jo nosūtītie ziņojumi vienkārši uzkrāsies ziņojumu rindā vēlākai apstrādei, kad saņēmējs tiks pārstartēts.

Maršrutēšana

Daudzas ziņojumapmaiņas starpprogrammatūras realizācijas ir atkarīgas no ziņojumu rindas sistēmas. Dažas realizācijas ļauj maršrutēšanas loģiku nodrošināt pašam ziņojumapmaiņas slānim, bet citas ir atkarīgas no klientu lietojumprogrammām, lai sniegtu maršruta informāciju vai ļautu kombinēt abas paradigmas. Dažās realizācijas izmanto apraides vai multiraides izplatīšanas paradigmas.

Pārveidošana

Ziņojumapmaiņas starpprogrammatūras sistēmā adresātam saņemtajam ziņojumam nav jābūt identiskam ar sākotnēji nosūtīto ziņojumu. MOM sistēma ar iebūvētu loģiku maršrutā var pārveidot ziņojumus, lai tie atbilstu sūtītāja vai saņēmēja prasībām. Saistībā ar maršrutēšanas un apraides / multiraides iespējām viena lietojumprogramma var nosūtīt ziņojumu savā dabīgajā formātā, un divas vai vairākas citas lietojumprogrammas var saņemt ziņojuma kopiju savā dabīgajā formātā. Daudzas modernas MOM sistēmas nodrošina sarežģītus ziņojumu pārveidošanas (vai kartēšanas) rīkus, kas ļauj programmētājiem norādīt transformācijas noteikumus, kas piemērojami vienkāršai GUI vilkšanas un nomešanas darbībai.

Trūkumi

Daudzu ziņojumapmaiņas starpprogrammatūras sistēmu galvenais trūkums ir tas, ka tām ir nepieciešama papildu komponente arhitektūrā — ziņojumu pārsūtīšanas aģents (starpnieks). Tāpat kā jebkurā citā sistēmā, arī citas sastāvdaļas pievienošana var samazināt veiktspēju un uzticamību, kā arī sarežģīt sistēmas uzturēšanu kopumā.
Turklāt daudziem starplietotņu sakariem ir iepriekšdefinēts sinhrons aspekts, jo sūtītājs īpaši vēlas gaidīt atbildi uz ziņojumu, pirms turpināt (sk. reāllaika skaitļošanu un gandrīz reāllaiku ārkārtējiem gadījumiem). Tā kā ziņojumapmaiņas saziņa parasti darbojas asinhroni, šādās situācijās tā var īsti neatbilst asinhronajam principam. Vairumam MOM sistēmu tomēr ir iespējas sagrupēt pieprasījumu un atbildi kā vienu pseidosinhronu transakciju.
Izmantojot sinhrono ziņojumapmaiņas sistēmu, zvanīšanas funkcija neatgriežas, kamēr izsauktā funkcija nav pabeigusi savu uzdevumu. Vaļīgi savienotā asinhronajā sistēmā zvanīšanas klients var turpināt ielādēt darbu adresātam, līdz resursi, kas nepieciešami šī darba veikšanai, ir iztērēti un izsauktais komponents pārstāj darboties. Protams, šādus apstākļus var samazināt vai novērst, uzraugot veiktspēju un pielāgojot ziņojumu plūsmu, bet tas ir darbs, kas nav nepieciešams sinhronā ziņojumapmaiņas sistēmā. Svarīgākais ir saprast katra veida sistēmas priekšrocības un saistības. Katra sistēma ir piemērota dažāda veida uzdevumiem. Dažreiz, lai iegūtu vēlamo uzvedību, ir nepieciešama divu veidu sistēmu kombinācija.

Standarti

Sākotnēji nebija standartu, kas regulētu ziņojumapmaiņas starpprogrammatūras izmantošanu, kas ir radījusi problēmas. Lielākajai daļai galveno piegādātāju ir savas realizācijas, katram no tiem ir savs lietojumprogrammu programmēšanas interfeiss (API) un pārvaldības rīki.
Viens no ilgāk pastāvējušajiem standartiem ziņojumapmaiņas starpprogrammatūrai ir X/Open grupas XATMI specifikācija (Distributed Transaction Processing: The XATMI Specification), kas standartizē starpprocesu sakaru API. Zināmākās šī API realizācijas ir Oracle Tuxedo un Latvijas uzņēmuma Mavimax Enduro/X starpprogrammatūra.
Advanced Message Queuing Protocol (AMQP) ir OASIS un ISO apstiprināts standarts, kas definē protokolu un formātus, ko izmanto starp iesaistītajām lietojumprogrammas komponentēm. AMQP var izmantot ar elastīgām maršrutēšanas shēmām, tostarp ar tādām vispārīgām ziņojumapmaiņas paradigmām kā no punkta līdz punktam, izejsazarotība, publicēšana — abonēšana un pieprasīšana  — atbildēšana.
High-Level Architecture (HLA IEEE 1516) ir IEEE un SISO standarts dalītās simulācijas savstarpējai izmantojamībai. Tas definē pakalpojumu kopu, kas tiek sniegta, izmantojot API, kas rakstīts C++ vai Java. Pakalpojumi piedāvā publicēt — abonēt informācijas apmaiņu, pamatojoties uz modulāru Federation Object Model. Pastāv arī pakalpojumi koordinētai datu apmaiņai un laika celšanai, pamatojoties uz loģisko simulācijas laiku, kā arī sinhronizācijas punktiem. Papildu pakalpojumi nodrošina īpašumtiesību nodošanu, datu izplatīšanas optimizāciju un iesaistīto sistēmu uzraudzību un pārvaldību.
MQTT ir ISO standarts (ISO/IEC PRF 20922), ko atbalsta OASIS organizācija. Tas nodrošina vieglu "publicēšana — abonēšana" uzticamu ziņapmaiņas transporta protokolu virs TCP/IP. Tas ir piemērots mašīna mašīnai (M2M) un lietu interneta risinājumos, ierīcēm ar ierobežotu atmiņas apjomu vai zemu datu pārraides ātrumu vai nestabilu sakaru kanālu.
Object Management Group Data Distribution Service (DDS) nodrošina uz ziņojumiem orientētu "publicēšana — abonēšana" starpprogrammatūras standartu, kā mērķis ir nodrošināt mērogojamu, reāllaika, uzticamu, augstas veiktspējas un savstarpēji izmantojamu datu apmaiņu starp izdevējiem un abonentiem. Standarts nodrošina saskarnes ar C++, C++11, C, Ada, Java un Ruby.
XMPP ir ziņojumapmaiņas starpprogrammatūras saziņas protokols, kura pamatā ir XML. Protokols ir izstrādāts, lai to varētu paplašināt. To var izmantots ne tikai "publicēšana — abonēšana" sistēmām, bet arī signalizācijai VoIP, video, failu pārsūtīšanai, spēlēšanai, lietu internetam, un sociālo tīklu pakalpojumiem.
Java EE programmēšanas vide nodrošina standarta API Java Message Service (JMS). Tā atbalsta modeļus "no punkta līdz punktam" (ziņojumu rinda) un "publicēšana — abonēšana".