STOMP是面向简单文本的消息协议。 它定义了一种可互操作的有线格式 ,该格式允许STOMP客户端与任何STOMP消息代理进行通信。 这提供了不同语言,平台和代理之间轻松,广泛的消息互操作性。
该规范定义了使其与其他消息传递协议不同的地方:
它是其他开放消息协议(例如AMQP)和JMS代理(例如OpenWire)中使用的实现特定有线协议的替代。 它通过覆盖一小部分常用消息传递操作而不提供全面的消息传递API来与众不同。
STOMP是基于帧的协议。 框架由命令,一组可选的标头和可选的主体组成。 常用的命令有:
- 连接
- 发送
- 订阅
- UNSCUBSCRIBE
- 确认
- 纳克
- 断开
WebSocket消息也作为帧传输。 WebSocket上的STOMP将STOMP帧映射到WebSocket帧。
HornetQ,ActiveMQ,RabbitMQ等其他消息传递服务器通过WebSocket为STOMP提供本机支持。 让我们看一个有关如何使用ActiveMQ在WebSocket上使用STOMP的简单示例。
该示例的源代码可在github.com/arun-gupta/wildfly-samples/tree/master/websocket-stomp中找到 。
让我们开始吧!
- 如github.com/arun-gupta/activemq-openshift-cartridge所述,下载ActiveMQ 5.10或在OpenShift中配置ActiveMQ实例。
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
- 下载WildFly 8.1 zip ,解压缩并以
bin/standalone.sh
开头 - 克隆仓库并在WildFly上部署示例:
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消息发送到队列,订阅队列以接收消息,然后最终断开连接。可以使用Chrome Developer Tools看到STOMP框架,如下所示:
如您所见,每个STOMP框架都映射到一个WebSocket框架。
简而言之,OpenShift上的ActiveMQ正在端口61614上运行STOMP代理,并且可以通过端口转发在localhost:61614上进行访问。 单击“连接”按钮将使用与应用程序捆绑在一起的Stomp库来建立与ws:// localhost:61614 /的WebSocket连接。 后续按钮通过WebSocket发送STOMP帧,如开发人员工具的“框架”选项卡所示。
在jmesnil.net/stomp-websocket/doc/上了解有关所有部分如何协同工作的更多详细信息。 杰夫还写了一本很棒的书,解释了WebSocket上的STOMP以及他的移动和网络消息书中可以通过WebSocket完成的其他有趣的事情。
翻译自: https://www.javacodegeeks.com/2014/11/stomp-over-websocket.html