AMQP プロトコル

信頼性の高いエンタープライズメッセージング向けの Advanced Message Queuing Protocol です。AMQP 0.9.1 および 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 を使い始めませんか?

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