AMQP プロトコル
信頼性の高いエンタープライズメッセージング向けの Advanced Message Queuing Protocol です。AMQP 0.9.1 および 1.0 を完全サポートし、RabbitMQ と Azure Service Bus に対応します。
信頼性の高いエンタープライズメッセージング向けの Advanced Message Queuing Protocol です。AMQP 0.9.1 および 1.0 を完全サポートし、RabbitMQ と Azure Service Bus に対応します。
AMQP はエンタープライズメッセージング向けのオープン標準であり、さまざまなプラットフォームや実装をまたいで、信頼性が高く相互運用可能なメッセージ配信を提供します。
AMQP はメッセージ指向ミドルウェアのワイヤレベルプロトコルを定義し、異なるベンダー実装間で真の相互運用性を実現します。Exchange、Queue、Binding に基づく洗練されたルーティングモデルにより、ダイレクトルーティング、トピックベースルーティング、ファンアウト、ヘッダーベースルーティングなどの複雑なメッセージングパターンに対応します。sgcWebSockets は RabbitMQ で広く利用されている AMQP 0.9.1 と、Azure Service Bus が採用する OASIS 標準の AMQP 1.0 の両方を実装しており、最大限の柔軟性を提供します。
ミッションクリティカルなアプリケーション向けの、産業強度のメッセージング機能を提供します。
パブリッシャー確認とコンシューマー確認応答により、エンドツーエンドの配信保証を実現し、メッセージを失うことがありません。
direct、topic、fanout、headers の各 Exchange を Queue にバインドし、設定可能なルーティングキーで柔軟にルーティングできます。
コンシューマーは処理済みメッセージを明示的に確認応答します。確認応答がないメッセージは自動的にキューへ戻され、再配信されます。
パブリッシュと確認応答の操作を、全成功または全ロールバックの原子的なトランザクションにまとめられます。
組み込みのフロー制御により、高速なプロデューサーが低速なコンシューマーを圧迫することを防ぎ、安定したシステム性能を維持します。
単一の TCP 接続上で複数の論理チャネルを利用でき、接続オーバーヘッドを削減しつつ分離性を維持します。
本番環境でのデプロイに向けて、RabbitMQ (AMQP 0.9.1) および Azure Service Bus (AMQP 1.0) で検証済みです。
信頼性と相互運用性が最も重要となる、ミッションクリティカルなメッセージングシナリオに対応します。
銀行および決済システム向けに、配信保証と Exactly-once セマンティクスを備えた金融取引処理を実現します。
注文入力、フルフィルメント、配送、通知の各システム間で、信頼性の高いメッセージキューイングを用いて注文ワークフローを管理します。
信頼性の高い非同期メッセージ配信により、異種システムを接続するエンタープライズサービスバスを構築できます。
タスクキューと結果収集パターンを用いて、複数の処理ノードに作業を分散できます。
配信保証付きで監査イベントをキャプチャしてログシステムへルーティングし、監査証跡のエントリを失わないようにします。
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;