問題タブ [php-amqp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - PECL AMQP と php-amqp の比較
RabbitMQ を使用する PHP ベースのシステムを実装しようとしています。PECL AMQPとphp-amqp の2 つの成熟したライブラリがあることがわかります。
クライアントとワーカーの両方に PHP を使用します。
これら 2 つのライブラリを実際に使用した経験のある人はいますか? 特定の事柄について、一方が他方よりも優れているか? これらのいずれかを使用する場合、何か制限はありますか? どちらがより人気がありますか?
php - RabbitMQ 再試行メカニズム
私はrabbitMQを使用しています.basic_getを使用してキューからすべてのメッセージを取得し、自動的にackする手順はありません。つまり、メッセージをackまたはnackするまで、メッセージはキューに残ります。
例外がスローされたために処理できないメッセージがあり、メッセージが完全に処理されないことがあります。
このような場合、すぐに 2 回やり直して、それでも処理できない場合は、1 時間間隔でさらに 3 回やり直したいと思います。すべて失敗した場合は、メッセージをキューから永久に削除します。
質問は、rabbitMQ にメッセージの再試行 (再試行の回数もカウントする) を提供するメカニズムと、再試行がいつ開始されるかを選択する機能 (ある種の延期メカニズム) があるかどうかです。
php - php-amqp の「make test」中に「多くのテスト」が失敗する
「make test」の結果
php-5.6.0
、およびamqp-1.4.0
、を使用しrabbitmq-c-0.5.2
ます。
プロセスを終了することはできますが、「make テスト」を実行すると、すべての合格結果が得られません。
php - PHP-AMQPLIB: RPC -> RPC キューが unack メッセージを残す
イベント消費のために 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 によって生成されたキューは孤立しません。これは間違いなく、ブローカー オン ブローカーのパブリッシュ/コンシューム プロセスが原因で発生しています。
最後までお付き合いいただきありがとうございます...どんな助けもありがとうございます
- マイク
php - PHP AMQPQueue::consume() での xdebug の使用
RabbitMQ を使用しており、コンシューマー内で xdebug を使用したいと考えています。AMQPQueue
キューでメッセージをリッスンするために使用しています。xdebug は まで使用できますAMQPQueue::consume()
が、一度consume()
呼び出されるとブレークポイントを取得できません。どんな助けでも素晴らしいでしょう。
php - スレッド使用時の PHP AMQP (phpamqplib ではない) エラー
単純な AMQP クライアントをマルチスレッドにしようとしています。I が Publish with Thread を拡張しない場合、次のコードは機能します。
以下はエラーのある出力です。
なぜこれが起こるのか、または修正方法を知っている人はいますか?
Rabbitmq は HOST で実行されています。
クラス Publish 宣言から「extends Thread」を削除すると、プログラムは完全に機能します。上記のコードはまだスレッドを使用していません。クラスを拡張するだけで壊れます。
システム情報
OS: Ubuntu 15.10
Rabbitmq-c (apt-get インストール)
librabbitmq-dev:amd64 0.5.2-2 C で記述された amd64 AMQP クライアント ライブラリ - Dev Files librabbitmq1:amd64 0.5.2-2 C で記述された amd64 AMQP クライアント ライブラリ
このリンクに従って、ZTS をサポートするように Ubuntu PHP パッケージを再コンパイルします。
PHP 5.6.11-1ubuntu3.2 (cli)
Copyright (c) 1997-2015 PHP グループ
Zend Engine v2.6.0、Copyright (c) 1998-2015 Zend Technologies with Zend OPcache v7.0.6-dev、Copyright (c) 1999-2015、Zend Technologies
PHP モジュール
amqp 1.6.0 安定版
pthreads 2.0.10 安定版
php - videlavaro/php-amqplib を使用して basic_get 呼び出しをブロックするにはどうすればよいですか
https://github.com/videlvaro/php-amqplibを使用して、rabbitmq の作業を行っています。
メッセージの準備が整うまでブロックし、何もない場合は null を返す代わりにそれを返す、basic_get のブロッキング バージョン (または、繰り返し呼び出して毎回 1 つのメッセージしか取得できない basic_consume のバージョン) を作成しようとしています。待ち行列に。
basic_consume を使用して単一のメッセージを取得しようとすると、問題が発生し、「準備ができていません」が未確認のメッセージが大量に表示されます。(この方法でメッセージを 1 つだけ取得すると、毎回機能します。2 つのメッセージを取得しようとすると、ハングアップすることもあれば、機能することもあります)
php - どの ActiveMQ トランスポートを選択する必要がありますか?
ActiveMQ、php、stomp を使用しています。また、ActiveMQ を再起動したときに、stomp で作業しているコンシューマーは、接続が失われたことを認識できないことがわかりました。私は、1.2 のみがハートビートをサポートしていることを発見しました。また、ActiveMQ は stomp 1.1 を使用し、最新の php stomp 実装は 1.0 バージョンのみをサポートします。また、私はamqpを試しますが、PHPサポート0.9.1で見つかった最新の実装では、ActiveMQは1.0バージョンを使用し、クライアントがActiveMQに接続するとエラーが返されます:
また、qpid プロトンをコンパイルしようとしましたが、ubuntu にいくつか問題があり、php の例で混乱しています: https://qpid.apache.org/releases/qpid-proton-0.8/messenger/php/examples/recv.php。 html 含めるための proton.php はどこにありますか?
どの交通機関を選ぶべきですか?
php - RabbitMQ PHP (pecl php-amqp) の読み取りに 1.5 秒以上かかる (小さなベンチマークの場合)
RabbitMQ でテストを実行していますが、どういうわけか「しきい値」に達し、RabbitMQ が遅くなります。
私たちが行ったことは、RabbitMQ サーバーをセットアップし、pecl-amqp を使用して (pconnect なしで) MQ サーバーに接続し、ランダムなメッセージを 1 つ送信し、その後すぐに切断する小さな PHP スクリプトを作成しました。このプロセスを 200 回フォークします (単一の php 実行のため、スレッドはありません)。つまり、毎秒 +/- 2000 の接続が MQ サーバーに対して開かれ、閉じられます。
その後、別のサーバーで同じスクリプトを開始して、接続時間 + 読み取り時間を測定します。クライアントが「Connection.Start」メッセージを受信するまでに +/- 1.5 秒かかることがわかりました。状況を示すために、この 1 つのクライアントの tcpdump のスクリーンショットを追加しました。私たちが目にするもう 1 つの問題は、多くの TCP Out-Of-Order と再送信です。
サーバースペック
- ベアメタル
- CPU: 2x Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz
- メモリー: 24GB
TCPdump http://i.imgur.com/rF1GsOy.png
sysctl 設定:
rabbitmq.conf
rabbitmqctl レポート (「重い」負荷テスト中)
phpコード