問題タブ [php-amqplib]
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 - videlavaro/php-amqplib を使用して basic_get 呼び出しをブロックするにはどうすればよいですか
https://github.com/videlvaro/php-amqplibを使用して、rabbitmq の作業を行っています。
メッセージの準備が整うまでブロックし、何もない場合は null を返す代わりにそれを返す、basic_get のブロッキング バージョン (または、繰り返し呼び出して毎回 1 つのメッセージしか取得できない basic_consume のバージョン) を作成しようとしています。待ち行列に。
basic_consume を使用して単一のメッセージを取得しようとすると、問題が発生し、「準備ができていません」が未確認のメッセージが大量に表示されます。(この方法でメッセージを 1 つだけ取得すると、毎回機能します。2 つのメッセージを取得しようとすると、ハングアップすることもあれば、機能することもあります)
php - PHPでRabbitMQのsubscribeメソッドを書く
以下に定義されている関数があります。
私は次の機能を使用しています:
注: 次の行は別のクラス ファイルにあるため、上記の関数を含むクラスのオブジェクトを作成します。
基本的に、すべてのメッセージの本文を、キューに発行された呼び出し元関数に返したいと考えています。
現在の出力:
期待される出力:
php - RabbitMQ php エラー ソケット接続がタイムアウトしました
ソケット接続のタイムアウト エラーが発生しています。php-amqplib の投稿が限られているためです。それを理解することはできません。
注:そのエラーをキャッチして再接続しようとしています。しかし、phpでそれを行う方法がわかりません。nodejs の _onError 行の何かが役立ちます。
次のエラーが表示されます。
次の接続機能を使用しています。
そして、次の送信メッセージ:
php - php-amqplib と rabbitmq を使用した php の複数のタイプのメッセージング キュー
だから、私は 4 つのことを行う単純なアプリを作成しようとしています。
1)消費者のリストを取得します(登録されたものを取得できれば..参加するときに何らかの名前を付けることができるので、動的です)。
2) 1 つのランダムなコンシューマに「メッセージ」を送信し、結果を表示する
3) 1 人の特定の消費者 (上記のリストまたは事前定義されたリストから取得) に「メッセージ」を送信し、結果を表示します。
4) すべてのコンシューマに「メッセージ」を送信し、それぞれからの結果を表示します。
アプリは php-amqplib ( https://github.com/videlvaro/php-amqplib ) を使用して php で実行されます。rabbitmq は稼働中で、動作しているようです (チュートリアルを試してみました)。
私にとってamqp libのドキュメントは少し奇妙ですので、サンプルコードのいくつかの行と使用されているパラメータの説明をいただければ幸いです。
php - 高 CPU PHP (symfony) プロセス
https://github.com/php-amqplib/php-amqplibを使用して、rabbitmq からのメッセージを消費しています。問題なく快適に動作しているコンシューマーが何人かいます。今日、コンシューマー プロセスの 1 つがアイドル状態 (キューにメッセージがない) のときにホストの約 7% の CPU を消費しているのに対し、残りのプロセスはそれぞれ約 1% を消費していることを発見しました。
さらに、このプロセスのオンとオフを切り替えると、データベース (AWS RDS postgres インスタンス) の CPU 使用率に大きな変化が見られます。3 つのコンシューマー プロセスが実行されているため、DB は常に (キューに何もない場合でも) CPU 使用率が 30% を超えています。
標準の symfony 構成があり、コンシューマーは を使用して実行されますapp/console rabbitmq:consumer -w consumer_name
。問題の消費者は、私たちが知る限り、それについて特別なことは何もありません. ここでは手がかりがまったくないので、どんな助けも大歓迎です。
詳細:
コンシューマーをオンにすると、同じ一連のクエリがデータベースで大量に実行されていることがわかります (10 分間で 200,001 回)。キューに確認応答されていないメッセージはありません。それ以外の場合、コンシューマはメッセージを正しく処理します。クエリは、コンシューマのロジックの一部として通常実行される SELECT です。
php - RabbitMQ エラー タイムアウト
外部 API からの約 20,000 件のリクエストを解析するために RabbitMQ をセットアップしましたが、数分後にタイムアウトし続けます。合計 20.000 件のリクエストのうち約 2000 件を正しく解析できます。
ログファイルには次のように書かれています:
すでにハートビート値を増やしましたが、タイムアウトの理由がわかりません。構成: Ubuntu 14.04、NGINX 1.8.1、RabbitMQ 3.6.0
お時間とご意見をいただければ幸いです。
php - RabbitMQ PHP ドライバー (AMQP): ブロックされた接続の処理
ディスク レベルまたはメモリ ウォーターマーク アラートが原因で、RabbitMQ が接続をブロックし始めた状況を処理するために、意味のあるコードを作成しようとしています。
接続をブロック モードに設定することに関する通知のハンドラーを追加する可能性があります。
ただし、この通知は、接続を閉じようとしたときにのみ送信されるようです。
とても走っている
正常に実行されますが、ハンドラーはブロックされた接続に関する通知を受け取りません。
同時に、メッセージはキューに追加されません - ダッシュボードからわかります。
しかし、明示的に接続を閉じようとすると:
または暗黙的に(スクリプトを終了させるだけで、AMQPオブジェクトデストラクタが残りを行います)チャネルがブロックされたという通知を受け取り、その後、スクリプトはフリーズします。
問題は、公開時 (または公開直後) にブロックされたチャンネルに関する情報を取得する方法です。また、ブロックされた接続でスクリプトが永遠に待機するのを回避するにはどうすればよいですか?
前もって感謝します。