JMS is a Java API that allows applications to asynchronously and loosely couple send and receive messages. It supports both point-to-point and publish/subscribe messaging patterns. A JMS message contains a header, properties, and payload. Properties provide metadata about the message while the payload contains the actual data. Common JMS implementations include ActiveMQ, RabbitMQ, and IBM MQ.