STOMP RabbitMQ Client 组件:sgcMQ | eSeGeCe

STOMP RabbitMQ Client

TsgcWSPClient_STOMP_RabbitMQ 是内置了 RabbitMQ 目的地约定的 STOMP 客户端。RabbitMQ 把语义编码在目的地字符串中,因此 /queue//topic//exchange//amq/queue//temp-queue/ 各有不同含义。该组件把它们变成具名方法,并用带类型的头部记录取代原始字符串解析。

TsgcWSPClient_STOMP_RabbitMQ

通用 STOMP 客户端的一切依然可用。新增的是目的地辅助方法,以及带类型头部对象的 RabbitMQ 专有命名事件。

组件类

TsgcWSPClient_STOMP_RabbitMQ

规范

STOMP 1.0、1.1 和 1.2

传输

TCP (61613) 或 TLS (61614)

语言

Delphi、C++ Builder

传输:纯 TCP 和 TLS。sgcMQ 通过纯 TCP 和 TLS 与 RabbitMQ STOMP 插件通信。RabbitMQ 的 Web-STOMP 插件是一个 WebSocket 端点,因此访问它需要 sgcWebSockets 包,它提供 WebSocket 客户端。

订阅队列,向交换机发布

该示例在 RabbitMQ STOMP 插件的原生 TCP 端口 61613 上运行。若需加密链路,请在载体上打开 TLS 并使用 61614 端口。

uses
  sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Protocols,
  sgcWebSocket_Protocol_STOMP_Broker_Client,
  sgcWebSocket_Protocol_STOMP_RabbitMQ_Client;

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

  STOMP := TsgcWSPClient_STOMP_RabbitMQ.Create(nil);
  STOMP.Client := TCPClient;
  STOMP.Authentication.Enabled  := True;
  STOMP.Authentication.UserName := 'guest';
  STOMP.Authentication.Password := 'guest';

  STOMP.OnRabbitMQConnected := RabbitMQConnected;
  STOMP.OnRabbitMQMessage   := RabbitMQMessage;

  TCPClient.Active := True;
end;

procedure TForm1.RabbitMQConnected(Connection: TsgcWSConnection;
  Headers: TsgcWSRabbitMQSTOMPHeadersConnected);
begin
  // /queue/orders, durable
  STOMP.SubscribeQueue('orders');

  // /exchange/orders with routing pattern 'create'
  STOMP.SubscribeExchange('orders', 'create');
  STOMP.PublishExchange('orders', 'create', '{"id":42}');
end;

procedure TForm1.RabbitMQMessage(Connection: TsgcWSConnection;
  MessageText: string; Headers: TsgcWSRabbitMQSTOMPHeadersMessage;
  Subscription: TsgcWSBrokerSTOMPSubscriptionItem);
begin
  Memo1.Lines.Add(Headers.Destination + ': ' + MessageText);
end;
// include: sgcTCP_Client_WS.hpp, sgcWebSocket_Protocols.hpp,
// sgcWebSocket_Protocol_STOMP_RabbitMQ_Client.hpp

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

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

STOMP->OnRabbitMQConnected = RabbitMQConnected;
STOMP->OnRabbitMQMessage   = RabbitMQMessage;

TCPClient->Active = true;

// In the OnRabbitMQConnected handler:
STOMP->SubscribeQueue("orders");
STOMP->SubscribeExchange("orders", "create");
STOMP->PublishExchange("orders", "create", "{\"id\":42}");

关键属性与方法

每个辅助方法只需接受普通名称,RabbitMQ 目的地字符串由组件为您构建。

队列

SubscribeQueuePublishQueueUnSubscribeQueue 面向 RabbitMQ 的 /queue/ 目的地,并以持久化、自动删除和独占标志作为参数。

主题

SubscribeTopicPublishTopicUnSubscribeTopic 使用 /topic/ 目的地,它通过 RabbitMQ 的 amq.topic 交换机路由。

交换机

SubscribeExchange(name, pattern)PublishExchange(name, routingKey, text) 面向 /exchange/ 目的地,由绑定模式决定您会收到哪些消息。

外部队列

SubscribeQueueOutsidePublishQueueOutside 映射到 /amq/queue/,用于在别处声明、且客户端不得重新声明的队列。

临时队列

SubscribeTemporaryQueue(queue, replyTo)PublishTemporaryQueue 用一个短生命周期的回复目的地实现 RabbitMQ 的 /temp-queue/ 请求/回复模式。

通用目的地

当您需要具名辅助方法未覆盖的场景时,SubscribeExPublishExUnSubscribeEx 接受原始的目的地字符串。

带类型的头部

OnRabbitMQMessage 送达一个 TsgcWSRabbitMQSTOMPHeadersMessage 以及对应的订阅项,因此目的地、消息 id 和确认模式都是属性,而不是子字符串。

自定义头部

每个发布辅助方法都接受一个包含额外头部的 TStrings,您正是借此设置消息优先级、过期时间或持久化等 RabbitMQ 扩展。

连接

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

继续探索

在线帮助完整的 API 参考和使用指南。
Generic STOMP Client带标准帧集合的基础组件。
AMQP 0.9.1 Client如果不一定要用 STOMP,可选择 RabbitMQ 的原生协议。
下载免费试用版对接本地 RabbitMQ 容器运行。
价格Single、Team 和 Site 授权,均含完整源代码。
超值之选:All-AccesseSeGeCe 全部产品,含高级支持,每年 €1,059 起。
查看 All-Access 价格

准备好开始了吗?

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