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.
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.
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 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í.