Статьи

STOMP через WebSocket

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 .

Давайте начнем!

  1. Загрузите ActiveMQ 5.10 или предоставьте экземпляр ActiveMQ в OpenShift, как описано на github.com/arun-gupta/activemq-openshift-cartridge .
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    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
      Git remote: ssh://545b096a500446e6710004ae@activemq-milestogo.rhcloud.com/~/git/activemq.git/
      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
  2. Скачайте WildFly 8.1 zip , разархивируйте и запустите как bin/standalone.sh
  3. Клонируйте репозиторий и разверните образец на WildFly:
    1
    2
    3
    git clone https://github.com/arun-gupta/wildfly-samples.git
    cd wildfly-samples
    mvn wildfly:deploy
  4. Откройте приложение по адресу localhost: 8080 / websocket-stomp-1.0-SNAPSHOT /, чтобы увидеть страницу как:

    techtip53-умолчанию-страница

  5. Укажите текстовую полезную нагрузку «foobar и использование соглашений ActiveMQ для тем и очередей, чтобы указать имя очереди как« / queue / myQ1 ». Нажмите кнопки «Подключиться», «Отправить сообщение», «Подписаться» и «Отключить» одну за другой. Это отобразит сообщения в окне вашего браузера, где установлено соединение WebSocket, сообщение STOMP отправляется в очередь, подписывается на очередь для получения сообщения и, наконец, отключается. Кадры STOMP можно увидеть с помощью Chrome Developer Tools, как показано ниже:

    techtip53-WebSocket-кадры Как видите, каждый фрейм 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… блог.