イベント消費のために RMQ に永続的に接続されている PHP RPC タイプのコンシューマー (ブローカー) がいくつかあります。
1 つのブローカーがリモート システム上にありますが、開発/テストの目的で、「リモート」ブローカーをローカルで実行しています。
アプリ向けブローカーがあり、そのうちの 1 つ (ブローカー Au) が要求を処理し、処理中に、含まれているクラスを介してリモート ブローカーへの新しい AMQP 接続を作成し、要求をリモート ブローカー (ブローカー Vu) に発行します。
ブローカー Vu はリクエストを消費し、戻りペイロードをブローカー Au に公開し、basic_ack() メソッドを呼び出します。
Broker Au は、Broker Vu からの戻りペイロードをアンパックし、そのペイロードを PHP クライアントに返します。PHP クライアントは結果を正しく表示します。
要約:
testProgram --> コールバック キュー名を出力する testClass1 をインスタンス化します: (例: amq.gen-6_EhL_eb3HcLiiOb-TUNRA ) 、ブローカー Au にリクエストを発行します。
ブローカー Au --> コールバック キュー名を出力する class2 をインスタンス化します: (例: amq.gen-J0jhxeMAf1XZSbHZJ8NZ3g )、ブローカー Vu にリクエストを発行します。
ブローカー Vu --> 実行 (成功)、ペイロードをブローカー Au に返し、basic_ack() を呼び出します
ブローカー Au --> リターン ペイロードをデコードし、独自のリターン ペイロードを testProgram に生成し、basic_ack() を呼び出します。
testProgram --> 結果を表示して終了
この時点で、RMQ 管理コンソールの [Queues] タブに表示される内容は次のとおりです。
接続されているすべてのブローカー (AD = true) および ( amq.gen-J0jhxeMAf1XZSbHZJ8NZ3g ) が Ready: 0、Unacked: 1、Total: 1 を示している
送信したリクエストの数だけ、生成されたコールバック キューがそれに応じて増加します。
ブローカー Vu には、ping イベント ハンドラーがあります。これは、"yup - I'm here" と言って true を返すだけです。このイベントは、孤立した生成されたコールバック キューの孤立も生成します。
ブローカーにすべてのシャットダウン メソッドを登録しました。($channel->wait() に続いて) 接続クライアントでチャネル/接続を明示的に閉じようとすると、最初は機能し、ブローカーがクラッシュします。 2回目に実行されます。
ブローカー Vu に直接接続して同じイベント要求を送信するテスト プログラムを実行すると、amqp によって生成されたキューは孤立しません。これは間違いなく、ブローカー オン ブローカーのパブリッシュ/コンシューム プロセスが原因で発生しています。
最後までお付き合いいただきありがとうございます...どんな助けもありがとうございます
- マイク