概覽

STOMP(Simple Text Oriented Messaging Protocol)最初是為指令碼語言(如 Ruby、Python 和 Perl)連線到企業訊息代理而建立的。它旨在解決常用的訊息傳遞模式中的最小子集。STOMP 可以透過任何可靠的雙向流式網路協議使用,例如 TCP 和 WebSocket。儘管 STOMP 是一個面向文字的協議,但訊息負載可以是文字或二進位制。

STOMP 是一個基於幀的協議,其幀以 HTTP 為模型。以下清單顯示了 STOMP 幀的結構

COMMAND
header1:value1
header2:value2

Body^@

客戶端可以使用 SENDSUBSCRIBE 命令傳送或訂閱訊息,並帶有一個 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 伺服器來定義其支援的目的地的語義和語法。然而,目的地通常是路徑狀字串,其中 /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 協議最基本的理解。我們建議完整閱讀協議規範

© . This site is unofficial and not affiliated with VMware.