一、STOMP是什么?
STOMP is the Simple(or Streaming)Text Orientated Messaging Protocol(STOMP是面向文本的简单或流式消息传递协议)。以前称为TTMP,是一种简单的基于文本的协议,专为与面向消息的中间件(message-oriented middleware MOM)一起工作而设计。
STOMP提供了一种可互操作的有线格式,以便STOMP客户端可以与任何STOMP消息代理通信以在许多语言、平台和代理之间提供简单和广泛的消息互操作性。
二、设计简洁
STOMP是一个非常简单且易于实现的协议,来自HTTP设计学派;服务器端可能很难很好地实现,但编写一个客户端来连接很容易。例如,你可以使用Telnet登录任何STOMP代理并与之交互。
许多开发人员告诉我们,他们已经设法在几个小时内用自己的特定语言、运行时或平台编写了一个STOMP客户端到STOMP网络中。因此,如果你喜欢的语言/运行时没有提供足够好的STOMP客户端,不要害怕编写一个。
三、协议简介
该协议与HTTP大致相似,并使用以下命令在TCP上工作:
- CONNECT
- SEND
- SUBSCRIBE
- UNSUBSCRIBE
- BEGIN
- COMMIT
- ABORT
- ACT
- NACK
- DISCONNECT
客户端和服务器之间的通信是通过由多条组成的“框架”进行的。第一行包含命令,后面是:格式的标题(每行一个),后面是空行,然后是正文内容,以空字符结尾。服务器和客户端之间的通信是通过MESSAGE、RECEIPT或ERROR帧进行的,这些帧具有类似的标头和正文内容格式。
四、案例
- 客户端发送消息给服务器:
SEND
destination:/app/hello
content-length:17
{"name":"你好"}
- 服务器端发送消息给客户端:
MESSAGE
destination:/topic/greetings
content-type:application/json
subscription:sub-0
message-id:eda33740-c0fa-2bcb-1ce5-be1e1b093750-3
content-length:28
{"content":"Hello, 你好!"}
五、实现的消息中间件
以下是支持STOMP的MOM中间件:
- Apache ActiveMQ,
- Fuse Message Broker
- HornetQ
- Open Message Queue (OpenMQ)
- RabbitMQ (message broker, has support for STOMP)
- syslog-ng through its STOMP destination plugin
STOMP网站还维护这一份实现列表:https://stomp.github.io/implementations.html
STOMP官方地址:https://stomp.github.io/
StompJs官网地址:https://stomp-js.github.io/
STOMP:https://en.wikipedia.org/wiki/Streaming_Text_Oriented_Messaging_Protocol
MOM(message-oriented middleware):https://en.wikipedia.org/wiki/Category:Message-oriented_middleware
应用层协议(Application layer protocols):https://en.wikipedia.org/wiki/Category:Application_layer_protocols
开源SDK:https://github.com/mingyang66/spring-parent