此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10! |
概述
STOMP (简单 面向文本的消息传递协议)最初是为脚本语言创建的 (例如 Ruby、Python 和 Perl)连接到企业消息代理。是的 旨在解决常用消息传递模式的最小子集。STOMP 可以是 用于任何可靠的双向流式网络协议,例如 TCP 和 WebSocket。 尽管 STOMP 是一种面向文本的协议,但消息有效负载可以 文本或二进制。
STOMP 是一种基于帧的协议,其帧以 HTTP 为模型。以下列表显示了结构 STOMP 框架:
COMMAND header1:value1 header2:value2 Body^@
客户端可以使用SEND
或SUBSCRIBE
要发送或订阅的命令
messages,以及destination
描述
消息是关于谁应该接收它的。这使简单的
发布-订阅机制,可用于通过代理发送消息
发送到其他连接的客户端或向服务器发送消息以请求
执行一些工作。
当您使用 Spring 的 STOMP 支持时,Spring WebSocket 应用程序会起作用
作为客户的 STOMP 经纪人。消息被路由到@Controller
消息处理
方法或跟踪订阅和
向订阅用户广播消息。您还可以将 Spring 配置为工作
使用专用的 STOMP 代理(例如 RabbitMQ、ActiveMQ 等)进行实际作
消息广播。在这种情况下,Spring 会维护
与代理的 TCP 连接,向代理中继消息,并传递消息
从它到连接的 WebSocket 客户端。因此,Spring Web 应用程序可以
依赖基于 HTTP 的统一安全性、通用验证和熟悉的编程
用于消息处理的模型。
以下示例显示了订阅接收股票报价的客户端,该
服务器可以定期发出(例如,通过发送消息的计划任务
通过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 协议。我们建议完整查看协议规范。