Java Messaging Service (JMS) is a specification that describes a common way for Java programs to create, send, receive and read distributed enterprise messages using a loosely coupled and asynchronous messaging approach. A JMS provider delivers messages to clients as they arrive without requiring the client to request them. JMS supports point-to-point, publish-subscribe, and request-reply messaging domains. The JMS API defines programming elements like connections, sessions, producers and consumers that Java programs use to participate in messaging.