JMS is a standard Java EE API that allows loosely coupled, asynchronous communication between Java EE components. Applications that take advantage of JMS do not interact with each other directly; instead, JMS message producers send messages to a destination (JMS queue or topic) and JMS consumers receive messages from those destinations.
There are two messaging domains that can be used when working with JMS: point-to-point (PTP) messaging, in which a JMS message is processed by only one message receiver, and publish/subscribe (pub/sub) messaging, in which all message receivers subscribed to a specific topic receive and process each message for said topic. JMS applications that use the PTP messaging domains use message queues as their JMS destinations, whereas applications that use pub/sub use message topics.