STOMP ActiveMQ Client
TsgcWSPClient_STOMP_ActiveMQ 是为 Apache ActiveMQ 调优的 STOMP 客户端。它在 ActiveMQ 的目的地命名之上增加了队列和主题辅助方法、每个事件上的带类型头部对象,以及持久化订阅所需的、承载消息代理专有设置的 ActiveMQ_Options 属性。
TsgcWSPClient_STOMP_ActiveMQ 是为 Apache ActiveMQ 调优的 STOMP 客户端。它在 ActiveMQ 的目的地命名之上增加了队列和主题辅助方法、每个事件上的带类型头部对象,以及持久化订阅所需的、承载消息代理专有设置的 ActiveMQ_Options 属性。
通用 STOMP 客户端的一切依然适用。新增的是目的地辅助方法、ActiveMQ 专有命名事件以及消息代理选项。
TsgcWSPClient_STOMP_ActiveMQ
STOMP 1.0、1.1 和 1.2
TCP (61613) 或 TLS (61612)
Delphi、C++ Builder
传输:纯 TCP 和 TLS。sgcMQ 通过纯 TCP 和 TLS 与 ActiveMQ 通信。ActiveMQ 的 STOMP-over-WebSocket 连接器是一个 WebSocket 端点,因此访问它需要 sgcWebSockets 包,它提供 WebSocket 客户端。
该示例使用 ActiveMQ 的原生 STOMP 端口 61613。若需加密链路,请在载体上打开 TLS,并使用该消息代理在 61612 端口上的 stomp+ssl 连接器。
uses
sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Protocols,
sgcWebSocket_Protocol_STOMP_Broker_Client,
sgcWebSocket_Protocol_STOMP_ActiveMQ_Client;
var
TCPClient: TsgcTCPClient;
STOMP: TsgcWSPClient_STOMP_ActiveMQ;
begin
TCPClient := TsgcTCPClient.Create(nil);
TCPClient.Host := 'broker.example.com';
TCPClient.Port := 61613;
STOMP := TsgcWSPClient_STOMP_ActiveMQ.Create(nil);
STOMP.Client := TCPClient;
STOMP.ActiveMQ_Options.ClientId := 'delphi-consumer-1';
STOMP.Authentication.Enabled := True;
STOMP.Authentication.UserName := 'admin';
STOMP.Authentication.Password := 'admin';
STOMP.OnActiveMQConnected := ActiveMQConnected;
STOMP.OnActiveMQMessage := ActiveMQMessage;
TCPClient.Active := True;
end;
procedure TForm1.ActiveMQConnected(Connection: TsgcWSConnection;
Headers: TsgcWSActiveMQSTOMPHeadersConnected);
begin
STOMP.SubscribeQueue('orders');
STOMP.PublishQueue('orders', '{"id":42}');
end;
procedure TForm1.ActiveMQMessage(Connection: TsgcWSConnection;
MessageText: string; Headers: TsgcWSActiveMQSTOMPHeadersMessage;
Subscription: TsgcWSBrokerSTOMPSubscriptionItem);
begin
Memo1.Lines.Add(Headers.Destination + ': ' + MessageText);
end;
// include: sgcTCP_Client_WS.hpp, sgcWebSocket_Protocols.hpp,
// sgcWebSocket_Protocol_STOMP_ActiveMQ_Client.hpp
TsgcTCPClient *TCPClient = new TsgcTCPClient(this);
TCPClient->Host = "broker.example.com";
TCPClient->Port = 61613;
TsgcWSPClient_STOMP_ActiveMQ *STOMP =
new TsgcWSPClient_STOMP_ActiveMQ(this);
STOMP->Client = TCPClient;
STOMP->ActiveMQ_Options->ClientId = "cbuilder-consumer-1";
STOMP->Authentication->Enabled = true;
STOMP->Authentication->UserName = "admin";
STOMP->Authentication->Password = "admin";
STOMP->OnActiveMQConnected = ActiveMQConnected;
STOMP->OnActiveMQMessage = ActiveMQMessage;
TCPClient->Active = true;
// In the OnActiveMQConnected handler:
STOMP->SubscribeQueue("orders");
STOMP->PublishQueue("orders", "{\"id\":42}");
您最常使用的成员。
SubscribeQueue、PublishQueue 和 UnSubscribeQueue 接受普通的队列名并构建 /queue/ 目的地,同时提供持久化、独占和确认模式参数。
SubscribeTopic、PublishTopic 和 UnSubscribeTopic 对 /topic/ 目的地做同样的事,而持久化订阅在这里最为重要。
对于具名辅助方法未覆盖的场景,SubscribeEx、PublishEx 和 UnSubscribeEx 接受原始的目的地字符串。
ActiveMQ_Options 承载 ActiveMQ 专有设置,其中包括消息代理用来识别再次连接的持久化订阅者的 ClientId。
订阅辅助方法接受一个 Durable 标志,因此主题订阅者可以断开连接,之后再来取回消息代理为它保留的消息。
OnActiveMQMessage 送达一个 TsgcWSActiveMQSTOMPHeadersMessage 以及对应的订阅项,因此目的地、消息 id 和确认模式都是属性。
订阅时传入一个确认模式,之后用消息 id 调用 ACK 或 NACK。在 ackAuto 模式下,消息一经发出,消息代理即视其为已投递。
每个发布辅助方法都接受一个内容类型、一个可选的事务名称,以及一个用于优先级、持久化和过期时间等 ActiveMQ 头部的消息选项对象。
Client、Authentication、HeartBeat、Versions 和 Options 的行为与通用 STOMP 客户端上完全一致。