STOMP 协议

简单文本消息传递协议,实现可互操作的消息传递。从您的 Delphi 应用程序连接到 RabbitMQ、ActiveMQ 及任何兼容 STOMP 的代理。

快速解答: sgcWebSockets 通过 TsgcWebSocketClientSTOMP 属性为其添加 STOMP 消息传递,使 Delphi 和 C++ Builder 应用能够通过 WebSocket 对 RabbitMQ、ActiveMQ 或任何 STOMP 代理进行订阅、发送、运行事务和协商心跳。

什么是 STOMP?

STOMP 提供了一种简单的基于文本的消息传递协议,可实现不同消息代理与客户端实现之间的互操作性。

简单、可互操作的消息传递

STOMP 的设计目标是简单易实现。与二进制协议不同,STOMP 使用基于文本的帧格式,人类可读,调试直观。它定义了一组精简的命令 — CONNECT、SEND、SUBSCRIBE、UNSUBSCRIBE、ACK、NACK、BEGIN、COMMIT、ABORT 和 DISCONNECT — 涵盖所有常见的消息传递模式。sgcWebSockets 通过 WebSocket 连接实现 STOMP 协议,使浏览器和原生客户端均可与企业级消息代理通信。

  • 人类可读的基于文本的协议
  • 兼容任何支持 STOMP 的代理
  • 精简命令集,快速开发
  • 基于 WebSocket 运行,兼容浏览器
SEND destination:/queue CLIENT BROKER

STOMP 功能

简洁的基于文本协议,让企业级消息传递变得简单。

基于文本的协议

人类可读的帧格式使调试和开发更加直观。每个帧由命令、头部和可选的消息体组成。

RabbitMQ & ActiveMQ

与 RabbitMQ 和 ActiveMQ 消息代理完全兼容,提供企业级消息基础设施的访问能力。

CONNECT/SEND/SUBSCRIBE

简洁的命令集,涵盖连接管理、消息发送和主题订阅,语义清晰明确。

回执确认

向代理请求回执确认,确保您的消息已被成功接收和处理。

事务支持

使用 BEGIN、COMMIT 和 ABORT 命令,将多个 SEND 和 ACK 操作组合为原子事务。

保活协商

自动保活机制,检测断开的连接并维持与代理的持久会话。

STOMP 使用场景

STOMP 提供简单可靠通信的企业级消息传递场景。

企业级消息队列

将 Delphi 应用程序连接到企业级消息队列,实现系统间可靠的异步通信。

微服务通信

通过基于主题的消息传递和队列模式,实现微服务之间的松耦合通信。

事件驱动架构

构建事件驱动系统,各组件响应通过 STOMP 消息代理发布的事件。

跨平台消息传递

通过通用协议,桥接不同语言和框架编写的应用程序之间的通信。

Delphi STOMP 示例

连接到 STOMP 代理,订阅目标地址,并发送消息。

uses
  sgcWebSocket_Client, sgcWebSocket_Types;

var
  WSClient: TsgcWebSocketClient;

procedure TForm1.FormCreate(Sender: TObject);
begin
  WSClient := TsgcWebSocketClient.Create(nil);
  WSClient.Host := 'broker.example.com';
  WSClient.Port := 15674;
  WSClient.Specifications.RFC6455.Protocol := 'stomp';

  // Configure STOMP protocol
  WSClient.STOMP.Enabled := True;
  WSClient.STOMP.Authentication.Username := 'guest';
  WSClient.STOMP.Authentication.Password := 'guest';
  WSClient.STOMP.VirtualHost := '/';
  WSClient.STOMP.HeartBeat.Outgoing := 10000;
  WSClient.STOMP.HeartBeat.Incoming := 10000;

  // Set up event handlers
  WSClient.OnSTOMPConnected := OnSTOMPConnected;
  WSClient.OnSTOMPMessage := OnSTOMPMessage;
  WSClient.OnSTOMPReceipt := OnSTOMPReceipt;
end;

procedure TForm1.ButtonConnectClick(Sender: TObject);
begin
  WSClient.Active := True;
end;

procedure TForm1.OnSTOMPConnected(Sender: TObject);
begin
  // Subscribe to a queue
  WSClient.STOMP.Subscribe('/queue/orders');
end;

procedure TForm1.OnSTOMPMessage(Sender: TObject;
  aDestination, aBody: string);
begin
  // Process incoming messages
  Memo1.Lines.Add(aDestination + ': ' + aBody);
end;

procedure TForm1.ButtonSendClick(Sender: TObject);
begin
  // Send a message to a destination
  WSClient.STOMP.Send('/queue/orders',
    '{"orderId": 12345, "status": "new"}');
end;

STOMP 常见问题

关于将 Delphi 和 C++ Builder 应用程序连接到 STOMP 代理的常见问题。

放置一个 TsgcWebSocketClient,设置其 Host 和 Port,将 Specifications.RFC6455.Protocol 设置为 'stomp',然后启用 STOMP 属性。连接后,调用 STOMP.Subscribe 接收帧,调用 STOMP.Send 向目标发布。组件实现了 STOMP 命令 CONNECT、SEND、SUBSCRIBE、ACK、NACK、BEGIN、COMMIT、ABORT 和 DISCONNECT。
该客户端可与 RabbitMQ 和 ActiveMQ 以及任何兼容 STOMP 的消息代理配合使用。由于 STOMP 是一种简单的基于文本的线路协议,同一组件可与任何实现 STOMP 规范的服务器通信。
是的。您可以使用 BEGIN、COMMIT 和 ABORT 将 SEND 和 ACK 操作组合为原子事务,向代理请求回执确认,并通过 STOMP.HeartBeat.OutgoingSTOMP.HeartBeat.Incoming 配置心跳协商,以保持连接活跃并检测断开的会话。STOMP 通过 WebSocket 传输运行,以实现浏览器兼容的消息传递。
sgcWebSockets 支持从 Delphi 7 到最新 Delphi 版本以及相应的 C++ Builder 版本,可在 Windows、macOS、Linux、iOS 和 Android 上运行。下载免费试用版,在您自己的项目中评估 STOMP 客户端。

准备好开始使用 STOMP 了吗?

下载免费试用版,几分钟内即可连接到企业级消息代理。