JMS nebo Java Message Service API je MOM (Message Oriented Middleware) middleware orientovaný na zprávy v Javě, který posílá zprávy mezi dvěma nebo více klienty. Jedná se o implementaci, která má za úkol řešit problém mezi producentem a konzumentem. MOM produkty zajišťují integraci mezi aplikacemi. Umožňují totiž business komponentám, aby fungovaly společně a mohly tak vytvořit ucelený, pružný a spolehlivý systém. Jedná se sice o naprosto odlišné komponenty, ale díky prostředníkovi jsou spolu schopné komunikovat za pomoci zpráv.

JMS je jedním z možných řešení této problematiky, protože poskytuje kompletní API pro vývojáře a umožňuje jim tak psát programy v Javě, které jsou schopné vytvářet, přijímat, posílat i číst zprávy, které si aplikace mezi sebou posílají. Soubor rozhraní spolu s přidruženou logikou definuje, jak klient přistupuje k prostředkům MOM.

Cílem JMS je poskytnutí maximálního množství konceptů a rozhraní v podobě, která minimalizuje počet konceptů, které musí programátor umět, aby se zprávami a MOM mohl pracovat. Programátor tak za použití JMS nemusí řešit technické pozadí koloběhu zpráv.

Typy systémů

V oblasti MOM se používají dva různé modely, tedy point-to-point nebo také peer-to-peer a publish-subscribe. Oba modely se liší jak v počtu poskytovatelů a odběratelů zpráv, tak v tom, jakým způsobem si odběratelé svoje zprávy vyzvedávají a způsobem, jakým jsou zprávy následně publikovány.

Point-to-point model

Zprávy jsou routovány individuálním odběratelům, kteří mají fronty pro příchozí zprávy. Tento typ posílání zpráv je postaven na frontách zpráv, odesílatelích a příjemcích. Každá zpráva je adresovaná specifické frontě a odběratel extrahuje zprávy z fronty, která je určená pro to, aby shromažďovala právě jejich zprávy.

Mnoho odesílatelů může posílat do fronty zprávy a každá ze zpráv má garantováno, že bude doručena a zpracována příjemcem. Fronty zadržují všechny zprávy, které jsou do nich zaslány, dokud nejsou zpracovány, nebo dokud nevyprší platnost zprávy. Pokud není zaznamenán žádný odběratel zpráv, fronta je drží tak dlouho, dokud se odběratel nepřihlásí.

Publish-and-subscribe model

Publish and subscribe model podporuje publikaci zpráv ke konkrétnímu „tématu“. Předplatitelé registrují svůj zájem o získávání zpráv, které jsou publikované k danému tématu. V tomuto modelu publikující ani předplatitel nevědí jeden o druhém. Systém by se tak dal přirovnat k anonymní tabuli se zprávami.

Zprávu může dostat nula i více příjemců. Existuje závislost ohledně načasování mezi publikujícími a předplatiteli. Publikující musí vytvořit téma, ke kterému se předplatitelé mohou přihlásit. Předplatitel musí zůstat neustále aktivní, aby zprávy dostával, pokud není předplatné nastavené jako trvanlivé. V takovém případě dojde k redistribuci zpráv, které byly publikovány, zatímco předplatitel nebyl připojen, jakmile se znovu připojí.

Výhody použití JMS

  • Asynchronní komunikace. Zprávy se řadí do front, což umožňuje vysoký výkon a vysokou doručitelnost. JMS zároveň dokáže posílat tisíce zpráv během vteřin různým odběratelům za pomoci vláken a procesů.
  • Podpora. JMS specifikaci lze snadno implementovat na většině message serverů.
  • Spolehlivost. Když jsou zprávy jednou odeslané, jsou spolehlivě doručeny odběrateli bez ztráty dat.
  • Kompatibilita. Pokud dvě aplikace používají různé druhy zpráv, mohou i tak jednoduše komunikovat za pomoci JMS.
  • Vyvážení zátěže.

Nevýhody použití JMS

  • Komplexnost. Jedná se o novou vrstvu s novou sadou serverů. To s sebou nese problémy s monitoringem, bezpečností i dalšími aspekty.
  • Rozdíly v implementaci. Různí dodavatelé neinterpretují standardy vždy zcela shodně a tak dochází k rozdílům v implementaci.
  • Kontroly. S přidáním nové vrstvy je potřeba zároveň přidat asynchronní distribuci dat. Je potřeba více kontrol a vyrovnávání zátěže.