对于最新的稳定版本,请使用 Spring Framework 7.0.6!spring-doc.cadn.net.cn

概述

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^@

Clients can use the SEND or SUBSCRIBE commands to send or subscribe for messages, along with a destination header that describes what the message is about and who should receive it. This enables a simple publish-subscribe mechanism that you can use to send messages through the broker to other connected clients or to send messages to the server to request that some work be performed.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

以下示例展示了一个客户端订阅接收股票报价,服务器可能会周期性地发出这些报价(例如,通过一个定时任务发送消息到经纪人):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服务器定义它们支持的目的地的语义和语法。然而,目的地通常被定义为路径类似的字符串,其中/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