AMQP メッセージの受信(3 / 3)

· コンポーネント

AMQP では 2 つのモードでメッセージを受信できます:

Consume

コンシューマーはキューからメッセージを消費します。メッセージを消費するにはキューが必要です。新しいコンシューマーが追加されると、キューにすでにメッセージが準備されていると仮定して、配信がすぐに開始されます。

コンシューマー登録時にターゲットキューが空でも問題ありません。その場合、新しいメッセージがエンキューされたときに最初の配信が行われます。

メッセージの消費は非同期タスクです。つまり、コンシューマーキューに新しいメッセージが配信されるたびに、サーバーから自動的にクライアントにプッシュされます。代替方法としてメッセージを同期的に受信する方法もご覧いただけます。

Consume メソッドはキューに新しいコンシューマーを作成し、新しいメッセージがあるたびに自動的にコンシューマークライアントに配信されます。

このメソッドの引数は以下の通りです:


メッセージは OnAMQPBasigGetOk イベントで配信されます。

AMQP.Consume('channel_name', 'exchange_name', 'consumer_tag');
procedure OnAMQPBasicGetOk(Sender: TObject; const aChannel: string; const aGetOk: TsgcAMQPFramePayload_Method_BasicGetOk; const aContent: TsgcAMQPMessageContent);
begin
  DoLog('#AMQP_basic_GetOk: ' + aChannel + ' ' + IntToStr(aGetOk.MessageCount) + ' ' + aContent.Body.AsString);
end; 

Get Messages

メッセージの取得は同期タスクです。つまり、キューにメッセージがあるかどうかをクライアントがサーバーに問い合わせます。代替方法としてメッセージを非同期で受信する方法もご覧いただけます。

GetMessage メソッドは AMQP サーバーにキューにメッセージが利用可能かどうかを尋ねるリクエストを送信します。メッセージがある場合は OnAMQPBasicGetOk イベントで配信され、キューが空の場合は OnAMQPBasicGetEmpty イベントが呼び出されます。

このメソッドの引数は以下の通りです:

AMQP.GetMessage('channel_name', 'exchange_name');
procedure OnAMQPBasicGetOk(Sender: TObject; const aChannel: string; const aGetOk: TsgcAMQPFramePayload_Method_BasicGetOk; const aContent: TsgcAMQPMessageContent);
begin
  DoLog('#AMQP_basic_GetOk: ' + aChannel + ' ' + IntToStr(aGetOk.MessageCount) + ' ' + aContent.Body.AsString);
end;
procedure OnAMQPBasicGetEmpty(Sender: TObject; const aChannel: string);
begin
  DoLog('#AMQP_basic_GetEmpty: ' + aChannel);
end;