Delphi & C++ Builder 向け AMQP クライアント | eSeGeCe

AMQP プロトコル

信頼性の高いエンタープライズメッセージング向けの Advanced Message Queuing Protocol です。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 はメッセージ指向ミドルウェアのワイヤレベルプロトコルを定義し、異なるベンダー実装間で真の相互運用性を実現します。Exchange、Queue、Binding に基づく洗練されたルーティングモデルにより、ダイレクトルーティング、トピックベースルーティング、ファンアウト、ヘッダーベースルーティングなどの複雑なメッセージングパターンに対応します。sgcWebSockets は RabbitMQ で広く利用されている AMQP 0.9.1 と、Azure Service Bus が採用する OASIS 標準の AMQP 1.0 の両方を実装しており、最大限の柔軟性を提供します。

  • ワイヤレベルプロトコルにより、ベンダー間の相互運用性を保証
  • Exchange、Queue、Binding による柔軟なルーティング
  • 確認応答によるメッセージ配信保証
  • AMQP 0.9.1 と 1.0 の両方に対応
PRODUCER EXCH Q1 Q2 CONSUMER

AMQP の機能

ミッションクリティカルなアプリケーション向けの、産業強度のメッセージング機能を提供します。

信頼性の高いメッセージ配信

パブリッシャー確認とコンシューマー確認応答により、エンドツーエンドの配信保証を実現し、メッセージを失うことがありません。

Exchange / Queue / Binding モデル

direct、topic、fanout、headers の各 Exchange を Queue にバインドし、設定可能なルーティングキーで柔軟にルーティングできます。

メッセージ確認応答

コンシューマーは処理済みメッセージを明示的に確認応答します。確認応答がないメッセージは自動的にキューへ戻され、再配信されます。

トランザクション

パブリッシュと確認応答の操作を、全成功または全ロールバックの原子的なトランザクションにまとめられます。

フロー制御

組み込みのフロー制御により、高速なプロデューサーが低速なコンシューマーを圧迫することを防ぎ、安定したシステム性能を維持します。

チャネル多重化

単一の TCP 接続上で複数の論理チャネルを利用でき、接続オーバーヘッドを削減しつつ分離性を維持します。

RabbitMQ および Azure Service Bus

本番環境でのデプロイに向けて、RabbitMQ (AMQP 0.9.1) および Azure Service Bus (AMQP 1.0) で検証済みです。

AMQP のユースケース

信頼性と相互運用性が最も重要となる、ミッションクリティカルなメッセージングシナリオに対応します。

金融取引処理

銀行および決済システム向けに、配信保証と Exactly-once セマンティクスを備えた金融取引処理を実現します。

注文管理

注文入力、フルフィルメント、配送、通知の各システム間で、信頼性の高いメッセージキューイングを用いて注文ワークフローを管理します。

エンタープライズサービスバス

信頼性の高い非同期メッセージ配信により、異種システムを接続するエンタープライズサービスバスを構築できます。

分散コンピューティング

タスクキューと結果収集パターンを用いて、複数の処理ノードに作業を分散できます。

監査ログ

配信保証付きで監査イベントをキャプチャしてログシステムへルーティングし、監査証跡のエントリを失わないようにします。

Delphi での AMQP サンプル

AMQP ブローカーに接続し、Queue を宣言してメッセージを送受信します。

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 で確認します。
このクライアントは、RabbitMQ で広く採用されている AMQP 0.9.1 と、Azure Service Bus で使用される OASIS 標準の AMQP 1.0 の両方を実装しています。本番環境向けに RabbitMQ と Azure Service Bus に対してテストおよび検証されており、ワイヤーレベルのプロトコルが他の準拠ブローカーとの相互運用性を保証します。
はい。パブリッシャー確認とコンシューマー確認応答がエンドツーエンドの配信保証を提供し、確認されなかったメッセージは自動的に再キューイングされ、パブリッシュと確認の操作をアトミックなトランザクションにグループ化できます。エクスチェンジ、キュー、バインディングのモデルは direct、topic、fanout、headers のルーティングをサポートし、単一接続上でチャネルの多重化を行います。
sgcWebSockets は Delphi 7 から最新の Delphi リリースまで、および対応する C++ Builder のバージョンを、Windows、macOS、Linux、iOS、Android でサポートします。無料体験版をダウンロードして、ご自身のプロジェクトで AMQP クライアントを評価してください。

AMQP を使い始めませんか?

体験版をダウンロードして、数分でエンタープライズメッセージブローカーに接続できます。