STOMP Client 组件:sgcMQ | eSeGeCe

STOMP Client

TsgcWSPClient_STOMP 是一个通用的 STOMP 1.0、1.1 和 1.2 客户端。STOMP 是文本帧协议,因此便于跟踪,几乎可以对接任何提供消息端点的消息代理。该组件覆盖标准帧集合,另有针对 RabbitMQ 和 ActiveMQ 的专用派生组件可用。

TsgcWSPClient_STOMP

通过 Versions 声明您接受的协议版本,消息代理会在 CONNECT 交互中选定其一。协商结果会在 OnSTOMPConnected 中送达。

组件类

TsgcWSPClient_STOMP

规范

STOMP 1.0、1.1 和 1.2

传输

TCP (61613) 或 TLS

语言

Delphi、C++ Builder

传输:纯 TCP 和 TLS。sgcMQ 通过纯 TCP 和 TLS 连接。如果您需要 STOMP over WebSocket,则需要 sgcWebSockets 包,它提供 WebSocket 客户端。

用一个 id 订阅,然后发送

STOMP 通过您自行选择的 id 来标识订阅,这个 id 既是您传给 UnSubscribe 的那个,也是每个入站 MESSAGE 帧上返回的那个。

uses
  sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Protocols,
  sgcWebSocket_Protocol_STOMP_Client;

var
  TCPClient: TsgcTCPClient;
  STOMP: TsgcWSPClient_STOMP;
begin
  TCPClient := TsgcTCPClient.Create(nil);
  TCPClient.Host := 'broker.example.com';
  TCPClient.Port := 61613;

  STOMP := TsgcWSPClient_STOMP.Create(nil);
  STOMP.Client := TCPClient;
  STOMP.Versions.V1_2 := True;
  STOMP.Options.VirtualHost := '/';
  STOMP.Authentication.Enabled  := True;
  STOMP.Authentication.UserName := 'guest';
  STOMP.Authentication.Password := 'guest';
  STOMP.HeartBeat.Enabled := True;

  STOMP.OnSTOMPConnected := STOMPConnected;
  STOMP.OnSTOMPMessage   := STOMPMessage;

  TCPClient.Active := True;
end;

procedure TForm1.STOMPConnected(Connection: TsgcWSConnection;
  Version, Server, Session, HeartBeat, RawHeaders: string);
begin
  STOMP.Subscribe('sub-0', '/queue/orders');
  STOMP.Send('/queue/orders', '{"orderId":12345}');
end;

procedure TForm1.STOMPMessage(Connection: TsgcWSConnection;
  MessageText, Destination, MessageId, Subscription, ACK, ContentType,
  RawHeaders: string);
begin
  Memo1.Lines.Add(Destination + ': ' + MessageText);
  STOMP.ACK(MessageId);
end;
// include: sgcTCP_Client_WS.hpp, sgcWebSocket_Protocols.hpp,
// sgcWebSocket_Protocol_STOMP_Client.hpp

TsgcTCPClient *TCPClient = new TsgcTCPClient(this);
TCPClient->Host = "broker.example.com";
TCPClient->Port = 61613;

TsgcWSPClient_STOMP *STOMP = new TsgcWSPClient_STOMP(this);
STOMP->Client = TCPClient;
STOMP->Versions->V1_2 = true;
STOMP->Authentication->Enabled  = true;
STOMP->Authentication->UserName = "guest";
STOMP->Authentication->Password = "guest";

STOMP->OnSTOMPConnected = STOMPConnected;
STOMP->OnSTOMPMessage   = STOMPMessage;

TCPClient->Active = true;

// In the OnSTOMPConnected handler:
STOMP->Subscribe("sub-0", "/queue/orders");
STOMP->Send("/queue/orders", "{\"orderId\":12345}");

关键属性与方法

您最常使用的成员。

发送

Send(destination, text, contentType, transaction, customHeaders) 写出一个 SEND 帧。后三个参数是可选的,因此一次简单的发送只需两个参数。

订阅

Subscribe(id, destination, ack, customHeaders) 以您自选的 id 注册一个订阅,UnSubscribe(id) 将其移除。确认模式默认为 ackAuto

确认

ACK(id, transaction) 确认一条消息,NACK(id, transaction) 拒绝它。两者都接受随 MESSAGE 帧一同到达的消息 id。

事务

BeginTransactionCommitTransactionAbortTransaction 接受一个事务名称。把该名称传给 SendACK,即可把它们纳入该事务。

消息事件

OnSTOMPMessage 把正文、目的地、消息 id、订阅 id、确认模式、内容类型以及原始头部块交给您,因此帧中的信息不会有任何丢失。

版本协商

Versions.V1_0V1_1V1_2 控制客户端对外声明的内容。消息代理选定的版本是 OnSTOMPConnected 的第一个参数。

回执与错误

消息代理确认某个帧时触发 OnSTOMPReceipt,拒绝时触发 OnSTOMPError,两者都会带上回执 id 和原始头部。

心跳

HeartBeat 配置在 CONNECT 时协商的出站和入站间隔。Ping 手动发送一次心跳,OnSTOMPPing 报告该交互。

连接选项

Options.VirtualHost 会成为 CONNECT 时的 host 头部,Options.DisconnectTimeout 则限制优雅的 Disconnect 等待消息代理回执的时长。

继续探索

在线帮助完整的 API 参考和使用指南。
STOMP for RabbitMQ带 RabbitMQ 目的地辅助方法的派生组件。
STOMP for ActiveMQ为 Apache ActiveMQ 调优的派生组件。
下载免费试用版连接到任何支持 STOMP 的消息代理。
价格Single、Team 和 Site 授权,均含完整源代码。
超值之选:All-AccesseSeGeCe 全部产品,含高级支持,每年 €1,059 起。
查看 All-Access 价格

准备好开始了吗?

下载免费试用版,从 Delphi 或 C++ Builder 发送您的第一个 STOMP 帧。