STOMP — это простой текстовый протокол обмена сообщениями. Он определяет совместимый формат проводов, который позволяет клиенту STOMP взаимодействовать с любым брокером сообщений STOMP. Это обеспечивает простую и широкую совместимость обмена сообщениями между различными языками, платформами и брокерами.
Спецификация определяет, что отличает ее от других протоколов обмена сообщениями:
Это альтернатива другим открытым протоколам обмена сообщениями, таким как AMQP, и проводным протоколам, специфичным для реализации, используемым в JMS-брокерах, таких как OpenWire. Он отличается тем, что охватывает небольшое подмножество часто используемых операций обмена сообщениями, а не предоставляет всеобъемлющий API обмена сообщениями.
STOMP — это протокол на основе фреймов. Кадр состоит из команды, набора необязательных заголовков и необязательного тела. Обычно используемые команды:
- CONNECT
- ОТПРАВИТЬ
- ПОДПИСЫВАТЬСЯ
- UNSCUBSCRIBE
- ACK
- NACK
- ОТКЛЮЧИТЬ
Сообщения WebSocket также передаются в виде фреймов. STOMP over WebSocket отображает фреймы STOMP в фреймы WebSocket.
Различные серверы обмена сообщениями, такие как HornetQ, ActiveMQ, RabbitMQ и другие, предоставляют встроенную поддержку STOMP через WebSocket. Давайте рассмотрим простой пример того, как использовать STOMP поверх WebSocket с использованием ActiveMQ.
Исходный код для примера доступен по адресу github.com/arun-gupta/wildfly-samples/tree/master/websocket-stomp .
Давайте начнем!
- Загрузите ActiveMQ 5.10 или предоставьте экземпляр ActiveMQ в OpenShift, как описано на github.com/arun-gupta/activemq-openshift-cartridge .
0102030405060708091011121314151617181920212223242526272829303132333435363738394041424344
workspaces> rhc app-create activemq diy --from-code=git:
//github.com/arun-gupta/activemq-openshift-cartridge.git
Using diy-
0.1
(Do-It-Yourself
0.1
)
for
'diy'
Application Options
-------------------
Domain: milestogo
Cartridges: diy-
0.1
Source Code: git:
//github.com/arun-gupta/activemq-openshift-cartridge.git
Gear Size:
default
Scaling: no
Creating application
'activemq'
... done
Disclaimer: This is an experimental cartridge that provides a way to
try
unsupported languages, frameworks, and middleware on OpenShift.
Waiting
for
your DNS name to be available ... done
Cloning into
'activemq'
...
Warning: Permanently added the RSA host key
for
IP address
'54.90.10.115'
to the list of known hosts.
Your application
'activemq'
is now available.
URL: http:
//activemq-milestogo.rhcloud.com/
SSH to: 545b096a500446e6710004ae
@activemq
-milestogo.rhcloud.com
Cloned to: /Users/arungupta/workspaces/activemq
Run
'rhc show-app activemq'
for
more details about your app.
workspaces> rhc port-forward activemq
Checking available ports ... done
Forwarding ports ...
To connect to a service running on OpenShift, use the Local address
Service Local OpenShift
------- --------------- ---- -----------------
java
127.0
.
0.1
:
1883
=>
127.7
.
204.1
:
1883
java
127.0
.
0.1
:
5672
=>
127.7
.
204.1
:
5672
java
127.0
.
0.1
:
61613
=>
127.7
.
204.1
:
61613
java
127.0
.
0.1
:
61614
=>
127.7
.
204.1
:
61614
java
127.0
.
0.1
:
61616
=>
127.7
.
204.1
:
61616
java
127.0
.
0.1
:
8161
=>
127.7
.
204.1
:
8161
Press CTRL-C to terminate port forwarding
- Скачайте WildFly 8.1 zip , разархивируйте и запустите как
bin/standalone.sh
- Клонируйте репозиторий и разверните образец на WildFly:
123
git clone https:
//github.com/arun-gupta/wildfly-samples.git
cd wildfly-samples
mvn wildfly:deploy
- Откройте приложение по адресу localhost: 8080 / websocket-stomp-1.0-SNAPSHOT /, чтобы увидеть страницу как:
- Укажите текстовую полезную нагрузку «foobar и использование соглашений ActiveMQ для тем и очередей, чтобы указать имя очереди как« / queue / myQ1 ». Нажмите кнопки «Подключиться», «Отправить сообщение», «Подписаться» и «Отключить» одну за другой. Это отобразит сообщения в окне вашего браузера, где установлено соединение WebSocket, сообщение STOMP отправляется в очередь, подписывается на очередь для получения сообщения и, наконец, отключается. Кадры STOMP можно увидеть с помощью Chrome Developer Tools, как показано ниже:
Как видите, каждый фрейм STOMP отображается на фрейм WebSocket.
Вкратце, ActiveMQ в OpenShift работает с брокером STOMP на порту 61614 и доступен на локальном хосте: 61614 с помощью переадресации портов. Нажатие на кнопку Connect использует библиотеку Stomp, входящую в комплект приложения, для установления соединения WebSocket с ws: // localhost: 61614 /. Последующие кнопки отправляют фреймы STOMP через WebSocket, как показано на вкладке Фреймы инструментов разработчика.
Подробнее о том, как все части работают вместе, читайте на jmesnil.net/stomp-websocket/doc/ . Джефф также написал отличную книгу, объясняющую STOMP через WebSocket, и много других интересных вещей, которые можно сделать через WebSocket, в своей книге «Мобильные и веб-сообщения» .
Ссылка: | STOMP через WebSocket от нашего партнера по JCG Аруна Гупта из Miles to go 2.0… блог. |