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 目的地字符串由组件为您构建。

队列

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

主题

SubscribeTopic、PublishTopic 和 UnSubscribeTopic 使用 /topic/ 目的地,它通过 RabbitMQ 的 amq.topic 交换机路由。

交换机

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

外部队列

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

临时队列

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

通用目的地

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

带类型的头部

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

自定义头部

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

连接

Client、Authentication、HeartBeat、Versions 和 Options 的行为与通用 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 通信。