AMQP 1.0 Client 组件:sgcMQ | eSeGeCe

AMQP 1.0 Client

TsgcWSPClient_AMQP1 实现 OASIS AMQP 1.0,该标准同时也作为 ISO/IEC 19464 发布。尽管名字相同,它与 AMQP 0.9.1 是完全不同的协议,对象模型也不同:容器打开会话,会话承载发送方和接收方链路,链路在基于信用的流控制下搬运消息。它正是 Azure Service Bus 和 Event Hubs 所使用的协议。

TsgcWSPClient_AMQP1

会话和链路都通过您为它们指定的名称寻址,因此 'session1''sender1' 在之后的每次调用中都指向同一批对象。

组件类

TsgcWSPClient_AMQP1

规范

OASIS AMQP 1.0 (ISO/IEC 19464)

传输

TCP (5672) 或 TLS (5671)

语言

Delphi、C++ Builder

传输:纯 TCP 和 TLS。sgcMQ 通过纯 TCP 和 TLS 连接。如果您需要 AMQP over WebSocket,则需要 sgcWebSockets 包,它提供 WebSocket 客户端。

打开会话,挂接链路,发送消息

发送方链路指向消息代理上的目标节点,接收方链路指向源节点。接收方一旦挂接,投递就会通过 OnAMQPMessage 到达。

uses
  sgcTCP_Client_WS, sgcWebSocket_Protocols,
  sgcWebSocket_Protocol_AMQP1_Client, sgcAMQP1_Classes, sgcAMQP1_Frames;

var
  TCPClient: TsgcTCPClient;
  AMQP1: TsgcWSPClient_AMQP1;
begin
  TCPClient := TsgcTCPClient.Create(nil);
  TCPClient.Host := 'broker.example.com';
  TCPClient.Port := 5672;

  AMQP1 := TsgcWSPClient_AMQP1.Create(nil);
  AMQP1.Client := TCPClient;
  AMQP1.AMQPOptions.ContainerId := 'delphi-app';
  AMQP1.AMQPOptions.Authentication.AuthType := amqp1authSASLPlain;
  AMQP1.AMQPOptions.Authentication.Username := 'guest';
  AMQP1.AMQPOptions.Authentication.Password := 'guest';

  AMQP1.OnAMQPConnect := AMQPConnect;
  AMQP1.OnAMQPMessage := AMQPMessage;

  TCPClient.Active := True;
end;

procedure TForm1.AMQPConnect(Sender: TObject;
  const aOpen: TsgcAMQP1FrameOpen);
begin
  AMQP1.CreateSession('session1');

  // Sender link: name, then the target node address
  AMQP1.CreateSenderLink('session1', 'sender1', '/queue/orders');

  // Receiver link: deliveries arrive on OnAMQPMessage
  AMQP1.CreateReceiverLink('session1', 'receiver1', '/queue/orders');

  AMQP1.SendMessage('session1', 'sender1', '{"id":42}');
end;
#include "sgcTCP_Client_WS.hpp"
#include "sgcWebSocket_Protocols.hpp"
#include "sgcWebSocket_Protocol_AMQP1_Client.hpp"

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

TsgcWSPClient_AMQP1 *AMQP1 = new TsgcWSPClient_AMQP1(this);
AMQP1->Client = TCPClient;
AMQP1->AMQPOptions->ContainerId = "cbuilder-app";
AMQP1->OnAMQPConnect = AMQPConnect;
AMQP1->OnAMQPMessage = AMQPMessage;

TCPClient->Active = true;

// In the OnAMQPConnect handler. SendMessage is SendMessage_ in C++ Builder.
AMQP1->CreateSession("session1");
AMQP1->CreateSenderLink("session1", "sender1", "/queue/orders");
AMQP1->CreateReceiverLink("session1", "receiver1", "/queue/orders");
AMQP1->SendMessage_("session1", "sender1", "{\"id\":42}");

关键属性与方法

您最常使用的成员。

会话

CreateSession 返回一个 TsgcAMQP1SessionCloseSession 将其拆除。会话是两个容器之间排序和窗口控制的单位。

链路

CreateSenderLink 挂接到目标节点,CreateReceiverLink 挂接到源节点,CloseLink 则可分离二者中的任意一个。一个会话最多可以持有 MaxLinksPerSession 条链路。

发送

SendMessage(session, link, text) 传输一条消息;当您需要应用属性、id 或注解时,还有一个接受完整 TsgcAMQP1Message 的重载。

接收

已挂接的接收方链路会把投递推送到 OnAMQPMessage。当阻塞式写法更合适时,GetMessage 可带超时地同步拉取一条消息。

投递反馈

传输离开客户端时触发 OnAMQPMessageSent,消息代理结算该投递时触发 OnAMQPMessageSentAck。两者是有意分开的。

身份验证

AMQPOptions.Authentication.AuthType 可选择 amqp1authSASLPlainamqp1authSASLAnonymousamqp1authSASLExternal 或不使用。OnAMQPSASLAuthentication 报告协商过程。

Azure 辅助工具

CreateCBSLinkPutCBSToken 实现 Claims-Based Security。CreateAzureCbsSasToken 构建 Service Bus 的 SAS 令牌,CreateAzureCbsJWT 则构建 OAuth bearer 令牌。

流控制

AMQPOptions.CreditSizeWindowSize 决定接收方在再次发放信用之前愿意接收多少内容。MaxFrameSizeChannelMax 在打开连接时协商确定。

帧检查

OnAMQPBeforeReadFrameOnAMQPBeforeWriteFrame 把每个原始帧连同一个 Handled 标志交给您,当消息代理表现异常时这非常有价值。

继续探索

在线帮助完整的 API 参考和使用指南。
AMQP 0.9.1 Client另一个 AMQP,带有交换机、队列和绑定。
下载免费试用版用该客户端对接 Azure Service Bus、Artemis 或 Qpid。
价格Single、Team 和 Site 授权,均含完整源代码。
超值之选:All-AccesseSeGeCe 全部产品,含高级支持,每年 €1,059 起。
查看 All-Access 价格

准备好开始了吗?

下载免费试用版,从 Delphi 或 C++ Builder 建立您的第一条 AMQP 1.0 链路。