В начале 2000-х годов активно развивались системы обмена сообщениями и брокеры очередей. Корпоративные приложения increasingly строились вокруг асинхронного взаимодействия: сервисы отправляли события, очереди распределяли задачи, а серверы обменивались данными без прямой синхронной связи.
На рынке уже существовали крупные решения:
Однако большинство брокеров использовали собственные бинарные протоколы. Это создавало несколько серьёзных проблем:
В этот период активно развивались текстовые сетевые протоколы:
Они были популярны благодаря простоте анализа и независимости от платформы. Разработчики могли открыть telnet-сессию и вручную взаимодействовать с сервером.
На фоне этих идей возникла концепция простого текстового протокола для брокеров сообщений.
STOMP расшифровывается как:
Simple Text Oriented Messaging Protocol
Протокол появился как попытка создать минималистичный универсальный слой взаимодействия между клиентом и брокером сообщений.
Первоначально STOMP разрабатывался как альтернатива сложным бинарным протоколам. Основная идея заключалась в следующем:
Одним из ранних центров развития STOMP стал брокер сообщений:
Apache ActiveMQ
Именно вокруг него сформировалось активное сообщество пользователей STOMP.
Создатели протокола сознательно отказались от сложной архитектуры.
В основе STOMP лежали несколько принципов.
Каждое сообщение представлялось как текстовый фрейм:
SEND
destination:/queue/test
Hello World
Такой формат был легко читаем человеком.
Для сравнения:
STOMP содержал небольшой набор операций:
Это резко снижало порог входа.
STOMP не был привязан к:
Любой язык с TCP-сокетами мог реализовать клиента.
Реализация клиента STOMP занимала сравнительно мало кода.
Это сделало протокол популярным среди:
Важную роль в распространении STOMP сыграла технология:
Java Message Service
JMS являлся стандартом обмена сообщениями в экосистеме Java EE.
Проблема заключалась в том, что:
STOMP стал своеобразным мостом между JMS-брокерами и внешними системами.
Например:
Именно это сделало STOMP особенно востребованным.
Одним из ключевых этапов истории STOMP стало развитие:
Apache ActiveMQ
ActiveMQ активно продвигал идею мультипротокольности.
Брокер поддерживал:
Поддержка STOMP позволила подключать клиентов практически на любом языке.
Например:
Это было особенно важно в эпоху бурного роста веб-разработки.
История протокола делится на несколько этапов.
Первая версия была предельно простой.
Основные особенности:
Версия хорошо подходила для локальных сетей, но имела ограничения при нестабильных соединениях.
Следующая версия значительно расширила возможности протокола.
Появились:
Heartbeat стал особенно важным.
Он позволял:
Версия 1.2 стала наиболее зрелой редакцией протокола.
Были уточнены:
Именно STOMP 1.2 чаще всего используется сегодня.
Настоящий взрыв популярности STOMP произошёл после появления технологии:
WebSocket
До WebSocket браузеры имели серьёзные ограничения:
WebSocket изменил модель взаимодействия браузера с сервером.
Появилось полноценное двустороннее соединение.
На этом фоне STOMP оказался практически идеальным кандидатом для браузерных real-time приложений.
Причины были очевидны:
С распространением WebSocket появилась необходимость в JavaScript-клиентах STOMP.
Так возникла библиотека:
STOMP.js
Её задачей стало предоставление удобного API для браузеров.
Библиотека скрывала сложность:
Разработчик мог работать с высокоуровневым API вместо ручного формирования STOMP-фреймов.
Первые версии библиотеки были достаточно простыми.
Типичный код выглядел следующим образом:
const socket = new WebSocket('ws://localhost:15674/ws');
const client = Stomp.over(socket);
client.connect({}, () => {
client.subscribe('/queue/test', message => {
console.log(message.body);
});
client.send('/queue/test', {}, 'Hello');
});
Такой API быстро стал популярным благодаря:
Большую роль в развитии STOMP сыграл брокер:
RabbitMQ
RabbitMQ активно развивался в экосистеме Erlang и поддерживал множество протоколов через плагины.
Поддержка STOMP позволила использовать:
Особенно популярной стала схема:
Browser -> WebSocket -> STOMP -> RabbitMQ
Эта архитектура активно использовалась:
В 2010-х годах рынок начал переходить к real-time интерфейсам.
Появились:
STOMP.js стал важным элементом этой архитектуры.
Особенно в сочетании с:
Огромное влияние на популярность STOMP оказала экосистема:
Spring Framework
Spring добавил встроенную поддержку:
Типичная архитектура выглядела следующим образом:
Browser
↓
STOMP.js
↓
WebSocket
↓
Spring WebSocket
↓
Message Broker
После этого STOMP фактически стал стандартом real-time взаимодействия в Java-экосистеме.
С течением времени библиотека проходила несколько этапов модернизации.
Первые версии использовали callback-style API:
client.connect(headers, onConnect, onError);
Позже библиотека была адаптирована под:
Современная библиотека получила пакет:
@stomp/stompjs
Он стал официальным развитием старого stompjs.
Появились:
Со временем рынок messaging-протоколов изменился.
Появились новые стандарты:
Однако STOMP сохранил популярность благодаря нескольким особенностям.
Протокол остаётся крайне понятным.
Даже raw STOMP-frame можно прочитать глазами.
Текстовая модель отлично сочетается с WebSocket.
STOMP проще многих enterprise-протоколов.
Spring и ActiveMQ продолжают активно использовать STOMP.
Исторически STOMP часто сравнивали с:
Advanced Message Queuing Protocol
Основные различия:
| STOMP | AMQP |
|---|---|
| Текстовый | Бинарный |
| Простой | Более сложный |
| Минимум команд | Богатая модель |
| Лёгкая реализация | Сложный стек |
| Подходит для браузеров | Лучше для enterprise integration |
AMQP предоставляет:
STOMP же делает ставку на простоту.
Сегодня STOMP.js применяется в:
Современные версии библиотеки поддерживают:
Несмотря на возраст, STOMP продолжает использоваться благодаря нескольким причинам.
Текстовые фреймы удобно:
Даже минимальный клиент может быть реализован за короткое время.
STOMP поддерживается большим количеством брокеров:
Исторически именно WebSocket дал STOMP вторую жизнь.
Без WebSocket протокол, вероятно, остался бы нишевым решением для интеграции брокеров.
STOMP.js сыграл важную роль в развитии real-time веб-приложений.
До появления современных streaming-платформ библиотека стала одним из первых массовых способов организации:
Во многих enterprise-системах STOMP.js до сих пор остаётся стандартным способом интеграции браузера с message broker-инфраструктурой.