問題タブ [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.

0 投票する
1 に答える
1248 参照

php - PECL AMQP と php-amqp の比較

RabbitMQ を使用する PHP ベースのシステムを実装しようとしています。PECL AMQPphp-amqp の2 つの成熟したライブラリがあることがわかります。

クライアントとワーカーの両方に PHP を使用します。

これら 2 つのライブラリを実際に使用した経験のある人はいますか? 特定の事柄について、一方が他方よりも優れているか? これらのいずれかを使用する場合、何か制限はありますか? どちらがより人気がありますか?

0 投票する
1 に答える
1206 参照

php - RabbitMQ 再試行メカニズム

私はrabbitMQを使用しています.basic_getを使用してキューからすべてのメッセージを取得し、自動的にackする手順はありません。つまり、メッセージをackまたはnackするまで、メッセージはキューに残ります。

例外がスローされたために処理できないメッセージがあり、メッセージが完全に処理されないことがあります。

このような場合、すぐに 2 回やり直して、それでも処理できない場合は、1 時間間隔でさらに 3 回やり直したいと思います。すべて失敗した場合は、メッセージをキューから永久に削除します。

質問は、rabbitMQ にメッセージの再試行 (再試行の回数もカウントする) を提供するメカニズムと、再試行がいつ開始されるかを選択する機能 (ある種の延期メカニズム) があるかどうかです。

0 投票する
0 に答える
62 参照

php - php-amqp の「make test」中に「多くのテスト」が失敗する

「make test」の結果 ここに画像の説明を入力

php-5.6.0 、およびamqp-1.4.0、を使用しrabbitmq-c-0.5.2ます。

プロセスを終了することはできますが、「make テスト」を実行すると、すべての合格結果が得られません。

0 投票する
1 に答える
361 参照

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 によって生成されたキューは孤立しません。これは間違いなく、ブローカー オン ブローカーのパブリッシュ/コンシューム プロセスが原因で発生しています。

最後までお付き合いいただきありがとうございます...どんな助けもありがとうございます

- マイク

0 投票する
1 に答える
439 参照

php - PHP AMQPQueue::consume() での xdebug の使用

RabbitMQ を使用しており、コンシューマー内で xdebug を使用したいと考えています。AMQPQueueキューでメッセージをリッスンするために使用しています。xdebug は まで使用できますAMQPQueue::consume()が、一度consume()呼び出されるとブレークポイントを取得できません。どんな助けでも素晴らしいでしょう。

0 投票する
0 に答える
715 参照

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 安定版

0 投票する
1 に答える
644 参照

php - videlavaro/php-amqplib を使用して basic_get 呼び出しをブロックするにはどうすればよいですか

https://github.com/videlvaro/php-amqplibを使用して、rabbitmq の作業を行っています。

メッセージの準備が整うまでブロックし、何もない場合は null を返す代わりにそれを返す、basic_get のブロッキング バージョン (または、繰り返し呼び出して毎回 1 つのメッセージしか取得できない basic_consume のバージョン) を作成しようとしています。待ち行列に。

basic_consume を使用して単一のメッセージを取得しようとすると、問題が発生し、「準備ができていません」が未確認のメッセージが大量に表示されます。(この方法でメッセージを 1 つだけ取得すると、毎回機能します。2 つのメッセージを取得しようとすると、ハングアップすることもあれば、機能することもあります)

0 投票する
1 に答える
1051 参照

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 はどこにありますか?

どの交通機関を選ぶべきですか?

0 投票する
0 に答える
692 参照

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コード