Ответ
JMS (Java Message Service) — это стандартное Java API для асинхронного обмена сообщениями между приложениями или компонентами в рамках системы (Message-Oriented Middleware).
Основные модели обмена:
- Очереди (Point-to-Point): Сообщение отправляется в конкретную очередь и доставляется одному потребителю.
- Топики (Publish/Subscribe): Сообщение публикуется в топик и доставляется всем активным подписчикам.
Ключевые интерфейсы JMS:
ConnectionFactory— фабрика для создания соединений с брокером (ActiveMQ, IBM MQ, etc.).Connection— активное соединение с сервером JMS.Session— контекст для создания и получения сообщений, может быть транзакционным.Destination— адресат сообщения (QueueилиTopic).MessageProducer/MessageConsumer— для отправки и приема сообщений.
Пример отправки сообщения в очередь:
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;
public class JmsProducer {
public static void main(String[] args) throws JMSException {
// 1. Создание фабрики соединений
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
// 2. Установка соединения и запуск
Connection connection = factory.createConnection();
connection.start();
// 3. Создание сессии (не транзакционная, авто-подтверждение)
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 4. Создание очереди назначения
Queue queue = session.createQueue("ORDER.QUEUE");
// 5. Создание отправителя
MessageProducer producer = session.createProducer(queue);
// 6. Создание и отправка текстового сообщения
TextMessage message = session.createTextMessage("New order #12345");
producer.send(message);
System.out.println("Message sent: " + message.getText());
// 7. Закрытие ресурсов
session.close();
connection.close();
}
}
Практическое применение:
- Развязка сервисов: Микросервисы общаются через очереди, не зная друг о друге.
- Гарантированная доставка: Сообщения сохраняются брокером до получения.
- Асинхронная обработка: Отправитель не блокируется, ожидая ответа.
- Масштабирование: Можно запускать несколько экземпляров потребителей для одной очереди (конкурентные потребители).