适用于 Delphi 和 C++ Builder 的 AMQP 客户端 | eSeGeCe

AMQP 协议

用于可靠企业级消息传递的高级消息队列协议。完整支持 AMQP 0.9.1 和 1.0,兼容 RabbitMQ 和 Azure Service Bus。

快速解答: TsgcAMQPClient 组件可将 Delphi 和 C++ Builder 应用连接到 AMQP 代理,同时实现 AMQP 0.9.1 和 AMQP 1.0,对 RabbitMQ 和 Azure Service Bus 提供通道、交换机、队列、确认和事务支持。

什么是 AMQP?

AMQP 是企业级消息传递的开放标准,可在不同平台和实现之间提供可靠、互操作的消息投递。

企业级消息队列

AMQP 定义了面向消息的中间件的线级协议,确保不同厂商实现之间的真正互操作性。其基于交换机、队列和绑定的复杂路由模型支持多种消息模式,包括直接路由、基于主题的路由、扇出路由和基于消息头的路由。sgcWebSockets 同时实现了 AMQP 0.9.1(RabbitMQ 广泛采用的版本)和 AMQP 1.0(Azure Service Bus 所使用的 OASIS 标准),为您提供最大的灵活性。

  • 线级协议保障跨厂商互操作性
  • 通过交换机、队列和绑定实现灵活路由
  • 通过确认机制保证消息可靠投递
  • 同时支持 AMQP 0.9.1 和 1.0
PRODUCER EXCH Q1 Q2 CONSUMER

AMQP 特性

适用于关键业务应用程序的工业级消息传递功能。

可靠消息投递

通过发布者确认和消费者确认实现端到端投递保证,消息永不丢失。

交换机/队列/绑定模型

通过直连、主题、扇出和消息头交换机实现灵活路由,并以可配置路由键绑定至队列。

消息确认

消费者显式确认已处理的消息,未确认的消息自动重新入队以便重新投递。

事务支持

将发布和确认操作组合为原子事务,要么全部成功,要么全部回滚。

流量控制

内置流量控制防止快速生产者淹没慢速消费者,确保系统稳定运行。

通道多路复用

在单个 TCP 连接上承载多个逻辑通道,在保持隔离的同时降低连接开销。

RabbitMQ 与 Azure Service Bus

已通过 RabbitMQ(AMQP 0.9.1)和 Azure Service Bus(AMQP 1.0)的生产环境验证与测试。

AMQP 使用案例

对可靠性和互操作性要求最高的关键业务消息传递场景。

金融交易处理

以有保证的投递和精确一次语义处理金融交易,适用于银行和支付系统。

订单管理

通过可靠的消息队列管理订单录入、履单、发货和通知系统之间的订单工作流。

企业服务总线

构建企业服务总线,通过可靠的异步消息投递连接异构系统。

分布式计算

通过任务队列和结果收集模式,将工作分发到多个处理节点。

审计日志

通过有保证的投递将审计事件捕获并路由到日志系统,确保审计追踪记录不丢失。

Delphi AMQP 示例

连接 AMQP 代理,声明队列并交换消息。

uses
  sgcAMQP_Client, sgcAMQP_Classes;

var
  AMQPClient: TsgcAMQPClient;

procedure TForm1.FormCreate(Sender: TObject);
begin
  AMQPClient := TsgcAMQPClient.Create(nil);
  AMQPClient.Host := 'rabbitmq.example.com';
  AMQPClient.Port := 5672;
  AMQPClient.Authentication.Username := 'guest';
  AMQPClient.Authentication.Password := 'guest';
  AMQPClient.VirtualHost := '/';

  // Set up event handlers
  AMQPClient.OnAMQPConnect := OnAMQPConnect;
  AMQPClient.OnAMQPMessage := OnAMQPMessage;
  AMQPClient.Connect;
end;

procedure TForm1.OnAMQPConnect(Sender: TObject);
begin
  // Open a channel
  AMQPClient.OpenChannel(1);

  // Declare a queue
  AMQPClient.DeclareQueue(1, 'orders',
    False, True, False, False);

  // Start consuming messages
  AMQPClient.BasicConsume(1, 'orders',
    'consumer-1', False, False, False, False);
end;

procedure TForm1.OnAMQPMessage(Sender: TObject;
  aChannel: Integer; aMessage: TsgcAMQPMessage);
begin
  // Process the message
  Memo1.Lines.Add('Received: ' + aMessage.Body);

  // Acknowledge the message
  AMQPClient.BasicAck(aChannel, aMessage.DeliveryTag, False);
end;

procedure TForm1.ButtonPublishClick(Sender: TObject);
begin
  // Publish a message to the default exchange
  AMQPClient.BasicPublish(1, '', 'orders',
    '{"orderId": 67890, "total": 99.95}');
end;

AMQP 使用场景

关于从 Delphi 和 C++ Builder 进行 AMQP 消息队列传递的常见问题。

创建一个 TsgcAMQPClient,设置其 Host、Port、Authentication 和 VirtualHost,然后调用 Connect。在 OnAMQPConnect 事件中,使用 OpenChannel 打开通道,使用 DeclareQueue 声明队列,并使用 BasicConsume 开始接收。使用 BasicPublish 发送消息,并使用 BasicAck 确认消息。
该客户端同时实现 AMQP 0.9.1(RabbitMQ 使用的广泛部署版本)和 AMQP 1.0(Azure Service Bus 使用的 OASIS 标准)。它已针对 RabbitMQ 和 Azure Service Bus 进行测试和验证,可用于生产部署,并且线路级协议保证与其他兼容代理的互操作性。
是的。发布者确认和消费者确认提供端到端的传递保证,未确认的消息会自动重新入队,您还可以将发布和确认操作组合为原子事务。交换机、队列和绑定模型支持 direct、topic、fanout 和 headers 路由,并通过单个连接进行通道多路复用。
sgcWebSockets 支持从 Delphi 7 到最新 Delphi 版本以及相应的 C++ Builder 版本,可在 Windows、macOS、Linux、iOS 和 Android 上运行。下载免费试用版,在您自己的项目中评估 AMQP 客户端。

准备好使用 AMQP 了吗?

下载免费试用版,几分钟内即可连接企业级消息代理。