对于最新的稳定版本,请使用 Spring Framework 6.2.0! |
概述
STOMP(简单 Text Oriented Messaging Protocol)最初是为脚本语言创建的 (例如 Ruby、Python 和 Perl)连接到企业消息代理。是的 旨在解决常用消息传递模式的最小子集。STOMP 可以是 通过任何可靠的双向流式处理网络协议(如 TCP 和 WebSocket)使用。 尽管 STOMP 是面向文本的协议,但消息有效负载可以是 text 或 binary。
STOMP 是一种基于帧的协议,其帧基于 HTTP。下面的清单显示了结构 的 STOMP 帧:
COMMAND header1:value1 header2:value2 Body^@
客户端可以使用SEND
或SUBSCRIBE
要发送或订阅的命令
消息以及destination
标头,该标头描述了
消息是关于以及谁应该接收它。这样,一个简单的
publish-subscribe 机制,可用于通过 broker 发送消息
发送到其他连接的客户端,或者向服务器发送消息以请求
执行一些工作。
当您使用 Spring 的 STOMP 支持时,Spring WebSocket 应用程序会执行
作为 STOMP 代理。消息被路由到@Controller
消息处理
方法或跟踪订阅的简单内存代理,以及
向订阅用户广播消息。您还可以配置 Spring 以工作
使用专用的 STOMP 代理(例如 RabbitMQ、ActiveMQ 等)进行实际
消息广播。在这种情况下, Spring 会维护
与代理的 TCP 连接,将消息中继到代理,并传递消息
从它向下到连接的 WebSocket 客户端。因此,Spring Web 应用程序可以
依赖于基于 HTTP 的统一安全性、通用验证和熟悉的编程
model 进行消息处理。
以下示例显示了订阅以接收股票报价的客户端,该
服务器可能会定期发出(例如,通过发送消息的计划任务
通过SimpMessagingTemplate
到经纪人):
SUBSCRIBE id:sub-1 destination:/topic/price.stock.* ^@
以下示例显示了一个发送交易请求的客户端,该请求服务器
可以通过@MessageMapping
方法:
SEND destination:/queue/trade content-type:application/json content-length:44 {"action":"BUY","ticker":"MMM","shares",44}^@
执行后,服务器可以 向客户广播交易确认消息和详细信息。
目标的含义在 STOMP 规范中故意保持不透明。它可以
可以是任何字符串,则完全由 STOMP 服务器来定义语义和
它们支持的目标的语法。然而,对于
destinations 设置为类似路径的字符串,其中/topic/..
暗示发布-订阅
(一对多) 和/queue/
表示点对点(一对一)消息
交流。
STOMP 服务器可以使用MESSAGE
命令向所有订阅者广播消息。
以下示例显示了向订阅的客户端发送股票报价的服务器:
MESSAGE message-id:nxahklf6-1 subscription:sub-1 destination:/topic/price.stock.MMM {"ticker":"MMM","price":129.45}^@
服务器无法发送未经请求的消息。所有消息
必须响应特定的客户端订阅,并且subscription
标头必须与id
标头的
客户端订阅。
前面的概述旨在提供对 STOMP 协议。我们建议完整地查看协议规范。