概述

STOMP(简单面向文本的消息传递协议)最初是为脚本语言(例如 Ruby、Python 和 Perl)创建的,用于连接到企业消息代理。 是的 旨在解决常用消息传递模式的最小子集。STOMP 可以用于任何可靠的双向流网络协议,例如 TCP 和 WebSocket。尽管 STOMP 是一种面向文本的协议,但消息有效负载可以是文本或二进制。spring-doc.cadn.net.cn

STOMP 是一种基于帧的协议,其帧基于 HTTP 建模。以下列表显示了结构STOMP 帧的结构:spring-doc.cadn.net.cn

COMMAND
header1:value1
header2:value2

Body^@

客户端可以使用SENDSUBSCRIBE要发送或订阅的命令messages,以及destination描述消息是关于什么的以及谁应该接收它。这启用了一个简单的发布-订阅机制,您可以使用它通过代理发送消息到其他连接的客户端或向服务器发送消息以请求执行一些工作。spring-doc.cadn.net.cn

当您使用 Spring 的 STOMP 支持时,Spring WebSocket 应用程序充当作为客户端的 STOMP 代理。消息被路由到@Controller消息处理方法或发送到一个简单的内存中代理,该代理跟踪订阅和向订阅用户广播消息。您还可以配置 Spring 以工作使用专用的 STOMP 代理(例如 RabbitMQ、ActiveMQ 等)进行实际消息广播。在这种情况下,Spring 维护与代理的 TCP 连接,将消息中继给代理,并将消息传递给从它向下传递到连接的 WebSocket 客户端。因此,Spring Web 应用程序可以依赖统一的基于 HTTP 的安全性、通用验证和熟悉的编程消息处理模型。spring-doc.cadn.net.cn

以下示例显示了订阅接收股票报价的客户端,该客户端服务器可能会定期发出(例如,通过发送消息的计划任务通过SimpMessagingTemplate给经纪人):spring-doc.cadn.net.cn

SUBSCRIBE
id:sub-1
destination:/topic/price.stock.*

^@

以下示例显示了一个发送交易请求的客户端,服务器可以通过@MessageMapping方法:spring-doc.cadn.net.cn

SEND
destination:/queue/trade
content-type:application/json
content-length:44

{"action":"BUY","ticker":"MMM","shares",44}^@

执行后,服务器可以向客户端广播交易确认消息和详细信息。spring-doc.cadn.net.cn

目标的含义在 STOMP 规范中故意保持不透明。它可以是任何字符串,完全由 STOMP 服务器来定义语义和它们支持的目标的语法。然而,对于destinations 是类似路径的字符串,其中/topic/..意味着发布-订阅(一对多)和/queue/暗示点对点(一对一)消息 交流。spring-doc.cadn.net.cn

STOMP 服务器可以使用MESSAGE命令向所有订阅者广播消息。以下示例显示了向订阅客户端发送股票报价的服务器:spring-doc.cadn.net.cn

MESSAGE
message-id:nxahklf6-1
subscription:sub-1
destination:/topic/price.stock.MMM

{"ticker":"MMM","price":129.45}^@

服务器不能发送未经请求的消息。所有消息来自服务器必须响应特定的客户端订阅,并且subscription服务器消息的标头必须与id标头客户端订阅。spring-doc.cadn.net.cn

前面的概述旨在提供对STOMP 协议的最基本的了解。我们建议完整查看协议规范spring-doc.cadn.net.cn