Java Message Service (JMS) е стандартен Java API, който позволява на приложенията да комуникират помежду си чрез асинхронно изпращане на съобщения. JMS е част от Java EE (сега Jakarta EE) и служи за свързване на разпределени компоненти в устойчив и слабо-свързан начин.
Основна идея:
JMS позволява едно приложение (Producer) да изпрати съобщение, което да бъде получено от друго приложение (Consumer) по асинхронен начин чрез брокер на съобщения.
Основни компоненти:
Компонент | Описание |
---|---|
Producer | Създава и изпраща съобщения |
Consumer | Получава и обработва съобщения |
Message | Обектът, който съдържа данните (текст, обекти и др.) |
Destination | Къде отиват съобщенията – може да е Queue или Topic |
ConnectionFactory | Фабрика за връзки към JMS |
Session | Контекст за изпращане и получаване на съобщения |
Broker | Сървър за маршрутизиране на съобщенията (напр. ActiveMQ, RabbitMQ, Artemis) |
Два основни модела на комуникация:
1. Point-to-Point (Queue)
- Производителят изпраща съобщение към опашка (Queue)
- Един потребител получава съобщението
- Подходящо за задачи като обработка на поръчки
Пример: Един сървър изпраща задачи към опашка, работник ги обработва една по една.
2. Publish / Subscribe (Topic)
- Производителят изпраща съобщение към тема (Topic)
- Много потребители могат да се абонират и получат съобщението
- Подходящо за известия, бюлетини и др.
Пример: Нотификация за нова публикация се изпраща до всички абонати.
Пример: Изпращане на текстово съобщение
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = factory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("myQueue");
MessageProducer producer = session.createProducer(queue);
TextMessage message = session.createTextMessage("Hello JMS!");
producer.send(message);
JMS осигурява:
- Асинхронност – изпращачът не чака получателя
- Устойчивост – съобщенията могат да се запазват и при срив
- Транзакционност – възможност за rollback
- Скалируемост – различни части на система могат да комуникират независимо
JMS се използва в:
- Системи за обработка на събития (event-driven)
- Финансови платформи
- Системи за логистика и поръчки
- IoT и разпределени приложения