AMQP 1.0.0 Delphi クライアント

· コンポーネント

sgcWebSockets 2024.2.0 から AMQP 1.0.0 がサポートされています

AMQP(Advanced Message Queuing Protocol)1.0.0 は、分散システム間の信頼性が高く非同期な通信を目的として設計されたメッセージングプロトコルです。アプリケーションやコンポーネント間のメッセージ交換を疎結合な形で促進し、直接的な依存関係を持たずに通信できるようにします。

全体として、AMQP 1.0.0 はさまざまなソフトウェアコンポーネントやシステムが疎結合な形で通信するための標準化された相互運用可能な方法を提供し、各種分散環境やエンタープライズレベルのアプリケーションに適しています。

AMQP の機能

設定

AMQP 1.0.0 クライアントには接続を設定できる AMQPOptions プロパティがあります。

AMQP 認証は Authentication プロパティで設定する必要があります。

接続

接続はクライアント(通常はメッセージングアプリケーションまたはサービス)がサーバー(メッセージブローカー)へ TCP 接続を開始することから始まります。クライアントはサーバーのポート(通常は非 TLS 接続では 5672、TLS で保護された接続では 5671)に接続します。TCP 接続が確立されると、クライアントとサーバーは使用する AMQP プロトコルバージョンをネゴシエートします。AMQP 1.0.0 はさまざまなバージョンをサポートし、ネゴシエーション中に双方がバージョン 1.0.0 の使用に同意します。

プロトコルネゴシエーションの後、サーバーの設定によってはクライアントがサーバーへ認証を行う必要があります。認証メカニズムには SASL(Simple Authentication and Security Layer)の PLAIN、EXTERNAL、またはサーバーがサポートするその他のメカニズムが含まれます。

例: セキュアポート 5671 でリッスンする AMQP サーバーに SASL 認証情報を使用して接続します。

// Creating AMQP client
oAMQP := TsgcWSPClient_AMQP1.Create(nil);
// Setting AMQP authentication options
oAMQP.AMQPOptions.Authentication.AuthType := amqp1authSASLPlain;
oAMQP.AMQPOptions.Authentication.Username := 'sgc';
oAMQP.AMQPOptions.Authentication.Password := 'sgc';
// Creating WebSocket client
oClient := TsgcWebSocketClient.Create(nil);
// Setting WebSocket specifications
oClient.Specifications.RFC6455 := False;
// Setting WebSocket client properties
oClient.Host := 'www.esegece.com';
oClient.Port := 5671;
oClient.TLS := True;
// Assigning WebSocket client to AMQP client
oAMQP.Client := oClient;
// Activating WebSocket client
oClient.Active := True; 

セッション

認証が完了すると、クライアントは AMQP セッションを開きます。セッションはクライアントとサーバー間の通信の論理的なコンテキストです。セッションは関連するメッセージング操作をまとめるために使用されます。新しいセッションを作成するには CreateSession メソッドを使用します。このメソッドではセッション名を指定するか空のままにすることができ、空の場合はコンポーネントが自動的に割り当てます。

セッションが正常に作成されると、セッションの詳細を含む OnAMQPSessionOpen イベントが発生します。

AMQP1.CreateSession('MySession');
procedure AMQP1AMQPSessionOpen(Sender: TObject; const aSession: TsgcAMQP1Session; 
  const aBegin: TsgcAMQP1FrameBegin);
begin
  ShowMessage('#session-open: ' + aSession.Id);
end; 

リンク

セッション内で、クライアントはサーバーが提供するキュー、トピック、その他のリソースなど特定のエンティティと通信するためのリンクを作成します。リンクはメッセージの送受信に使用される双方向の通信チャネルです。

このコンポーネントは送信者ノードおよび受信者ノードとして動作できます。各セッションについて任意の数のリンクを MaxLinksPerSession プロパティで設定した上限まで作成できます。

送信者リンク

新しい送信者リンクを作成するには CreateSenderLink メソッドを使用し、セッション名と必要に応じて送信者リンクの名前を渡します。リンクが正常に作成されると、OnAMQPLinkOpen イベントが発生します。

AMQP1.CreateSenderLink('MySession', 'MySenderLink');
procedure procedure TfrmClientAMQP1.AMQP1AMQPLinkOpen(Sender: TObject; 
  const aSession: TsgcAMQP1Session; const aLink: TsgcAMQP1Link; const aAttach: TsgcAMQP1FrameAttach);
begin
  ShowMessage('#link-open: ' + aLink.Name);
end; 

受信者リンク

新しい受信者リンクを作成するには CreateReceiverLink メソッドを使用し、セッション名と必要に応じて受信者リンクの名前を渡します。リンクが正常に作成されると、OnAMQPLinkOpen イベントが発生します。

AMQP1.CreateReceiverLink('MySession', 'MyReceiverLink');
procedure procedure TfrmClientAMQP1.AMQP1AMQPLinkOpen(Sender: TObject; 
  const aSession: TsgcAMQP1Session; const aLink: TsgcAMQP1Link; const aAttach: TsgcAMQP1FrameAttach);
begin
  ShowMessage('#link-open: ' + aLink.Name);
end; 

メッセージの送信

セッションが確立され、リンクが作成されると、クライアントは宛先へのメッセージ送信などのメッセージ操作を開始できます。送信者リンクを使用してメッセージを送信するには SendMessage メソッドを使用します。

AMQP1.SendMessage('MySession', 'MySenderLink', 'My first AMQP Message'); 

メッセージの受信

デフォルトでは、受信者リンクは自動モードで作成されます。これは新しいメッセージが到着するたびにクライアントに配信されることを意味します。

受信者リンクが手動モードで作成されている場合は、同期メソッドの GetMessage を使用して新しいメッセージが到着するまで待機し取得します。

自動・手動モードのいずれでも、新しいメッセージが到着するたびに OnAMQPMessage イベントが発生します。

procedure OnAMQPMessageEvent(Sender: TObject; const aSession:
    TsgcAMQP1Session; const aLink: TsgcAMQP1ReceiverLink; const aMessage:
    TsgcAMQP1Message; var DeliveryState: TsgcAMQP1MessageDeliveryState);
begin
  ShowMessage(aMessage.ApplicationData.AMQPValue.Value);
end; 

ドキュメント

AMQP1 Delphi クライアント

Delphi / C++ Builder 向け AMQP 1.0.0 クライアントの詳細はこちら https://www.esegece.com/help/sgcWebSockets/ja/#t=Components%2FProtocols%2FSubprotocols%2FAMQP1%2FProtocol_AMQP1.htm

デモのダウンロード

sgcWebSockets ライブラリで Windows 向けにコンパイルされた AMQP 1.0.0 クライアントデモをダウンロードしてください。