STOMP Client
TsgcWSPClient_STOMP 是一个通用的 STOMP 1.0、1.1 和 1.2 客户端。STOMP 是文本帧协议,因此便于跟踪,几乎可以对接任何提供消息端点的消息代理。该组件覆盖标准帧集合,另有针对 RabbitMQ 和 ActiveMQ 的专用派生组件可用。
TsgcWSPClient_STOMP 是一个通用的 STOMP 1.0、1.1 和 1.2 客户端。STOMP 是文本帧协议,因此便于跟踪,几乎可以对接任何提供消息端点的消息代理。该组件覆盖标准帧集合,另有针对 RabbitMQ 和 ActiveMQ 的专用派生组件可用。
通过 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 客户端。
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。
BeginTransaction、CommitTransaction 和 AbortTransaction 接受一个事务名称。把该名称传给 Send 和 ACK,即可把它们纳入该事务。
OnSTOMPMessage 把正文、目的地、消息 id、订阅 id、确认模式、内容类型以及原始头部块交给您,因此帧中的信息不会有任何丢失。
Versions.V1_0、V1_1 和 V1_2 控制客户端对外声明的内容。消息代理选定的版本是 OnSTOMPConnected 的第一个参数。
消息代理确认某个帧时触发 OnSTOMPReceipt,拒绝时触发 OnSTOMPError,两者都会带上回执 id 和原始头部。
HeartBeat 配置在 CONNECT 时协商的出站和入站间隔。Ping 手动发送一次心跳,OnSTOMPPing 报告该交互。
Options.VirtualHost 会成为 CONNECT 时的 host 头部,Options.DisconnectTimeout 则限制优雅的 Disconnect 等待消息代理回执的时长。