STOMP ActiveMQ Client 组件:sgcMQ | eSeGeCe

STOMP ActiveMQ Client

TsgcWSPClient_STOMP_ActiveMQ 是为 Apache ActiveMQ 调优的 STOMP 客户端。它在 ActiveMQ 的目的地命名之上增加了队列和主题辅助方法、每个事件上的带类型头部对象,以及持久化订阅所需的、承载消息代理专有设置的 ActiveMQ_Options 属性。

TsgcWSPClient_STOMP_ActiveMQ

通用 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}");

关键属性与方法

您最常使用的成员。

队列

SubscribeQueuePublishQueueUnSubscribeQueue 接受普通的队列名并构建 /queue/ 目的地,同时提供持久化、独占和确认模式参数。

主题

SubscribeTopicPublishTopicUnSubscribeTopic/topic/ 目的地做同样的事,而持久化订阅在这里最为重要。

通用目的地

对于具名辅助方法未覆盖的场景,SubscribeExPublishExUnSubscribeEx 接受原始的目的地字符串。

消息代理选项

ActiveMQ_Options 承载 ActiveMQ 专有设置,其中包括消息代理用来识别再次连接的持久化订阅者的 ClientId

持久化订阅

订阅辅助方法接受一个 Durable 标志,因此主题订阅者可以断开连接,之后再来取回消息代理为它保留的消息。

带类型的头部

OnActiveMQMessage 送达一个 TsgcWSActiveMQSTOMPHeadersMessage 以及对应的订阅项,因此目的地、消息 id 和确认模式都是属性。

确认

订阅时传入一个确认模式,之后用消息 id 调用 ACKNACK。在 ackAuto 模式下,消息一经发出,消息代理即视其为已投递。

消息选项

每个发布辅助方法都接受一个内容类型、一个可选的事务名称,以及一个用于优先级、持久化和过期时间等 ActiveMQ 头部的消息选项对象。

连接

ClientAuthenticationHeartBeatVersionsOptions 的行为与通用 STOMP 客户端上完全一致。

继续探索

在线帮助完整的 API 参考和使用指南。
Generic STOMP Client带标准帧集合的基础组件。
AMQP 1.0 ClientActiveMQ Artemis 同样支持 AMQP 1.0。
下载免费试用版对接本地 ActiveMQ 消息代理运行。
价格Single、Team 和 Site 授权,均含完整源代码。
超值之选:All-AccesseSeGeCe 全部产品,含高级支持,每年 €1,059 起。
查看 All-Access 价格

准备好开始了吗?

下载免费试用版,从 Delphi 或 C++ Builder 通过 STOMP 与 ActiveMQ 通信。