問題タブ [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 - 特定の Vm IP にメッセージを送信する方法
だから私はPHPでRabbitMqを使用しています。RabbitMqと2つのVms(ubuntuサーバー)を含むサーバーがあります。詳細については、これが私のコードです。
RabbitmQ サーバー: send.php:
これは最初の Vm のコードです: recive.php :
NB: 私の RobbitmQ では、localhost を使用するとエラーは発生しませんが、localhost を使用すると、Vm の制御を制御できず、メッセージが送信されます
php - RabbitMQ : DLX からのバインド
その情報(ドキュメントを含む)を検索しましたが、見つかりません。
RabbitMQ v. 2.7.1 で最新バージョンのphp-amqplibを使用しています。3 つのキューと 3 つの交換があります。
動作は非常に簡単です。メッセージは .xml ファイルに発行されますEXCHANGE_TO_PROCESS
。外部ワーカーがメッセージを処理します。処理が A-OK になった場合、メッセージは単純に ACK され、キューから削除されます (この部分は完全に機能します)。処理がうまくいかない場合、メッセージは代わりに に挿入され、 5 分間の TTL の後、再処理EXCHANGE_WAITING
のために DLX を介して に再挿入されます。EXCHANGE_TO_PROCESS
ただし、3 回目の失敗の後、cron ジョブが来る場所に挿入され、EXCHANGE_TO_CLEAN
メッセージやログ エラーなどをクリーンアップします。
ただし、私が遭遇した問題は、コードが (予想どおり) を明確に にバインドしQUEUE_WAITING
ているEXCHANGE_WAITING
ことですが、RabbitMQ 管理ページを調べると、2 つのキューがその交換にバインドされていることに気付きました。注文。5 分が経過すると、メッセージは消えます。理由はよくわかりません。QUEUE_TO_PROCESS
QUEUE_WAITING
これらすべてが私の質問に私たちをもたらします:デッドレター交換は暗黙的にパラメータの交換をキューにバインドしますか? そして : 失われたメッセージに何が起こっている可能性がありますか?
編集
私は私よりもさらに混乱しています。私は次の非常に基本的なコードを試しました:
これにより、2 つのキューと 2 つの exchange が作成され (ルーティング キーの煩わしさを避けるために、私は見てきましたfanout
)、queueA を exchangeA に、queueB を exchangeB にバインドし、queueA に TTL を設定し、その DLX を exchangeB に設定します。管理ページで何が起こっているかを観察すると、予想どおり、メッセージが queueA で 5 秒間費やされた後、上記のより複雑なコードのようにメッセージが消えます。
php-amqplib - php-amqplib の非ブロッキングの例で警告がスローされる
AMQP 通信に videlalvaro/php-amqplib ライブラリを使用しようとしていますが、ノンブロッキング バージョンを動作させることができないようです。demo/amqp_consumer_non_blocking.php を実行すると、次のエラー メッセージが継続的に表示されます。
@ 記号を使用してこのメッセージを抑制すると、エラーが静かになりますが、それでも何も表示されません。
私はそれにメッセージを正しく送信していると思います.Webインターフェイスを使用してメッセージをキューに直接発行していますが、私が言うように、非ブロッキングループでは何も得られません.
ブロッキング デモ (demo/amqp_consumer.php) で同じプロセスを実行すると、期待どおりに動作します。
他の誰かがこの種の問題を抱えていましたか、それとも可能な解決策を教えてくれますか? ありがとう。
php - RabbitMq: 重複したメッセージを置き換える
登録された Web フックのデータを送信するために RabbitMq を使用しています。
ベース情報: システムで連絡先が作成された場合、メッセージはキューに入れられ、コンシューマーは後で登録された URL にフック データを送信します。
私の質問に: 連絡先が 5 秒で 2 回更新され、両方のメッセージがまだキューにある可能性があります。しかし、2 番目のメッセージがキューに入れられた場合、最初のメッセージが削除されることを望みます。
メッセージを手動で削除できないことはわかっています。しかし、メッセージにIDを設定することは何とか可能で、同じIDを持つ2つのメッセージが同じキューにある場合、最初のメッセージは自動的に削除/置換されますか? その 1 つのリクエストのみが URL に送信されます。メッセージ自体にメッセージIDを設定できることは知っています。しかし、古いものに取って代わるものは何も見つかりませんでした。
私のPHPコード(簡略化):
ところで、私は php amqplib https://github.com/videlvaro/php-amqplibを使用しています。
助けてくれてありがとう
php - メッセージ delivery_info に RabbitMQ のチャネル参照がありません
私は現在、basic_get を使用して rabbitMQ からメッセージを取得した後、受信したメッセージに対して ack を自動的に送信せずにいくつかのロジックを実装しています。
ここのチュートリアル(メッセージ確認セクション) によると、メッセージ自体内でチャネル参照が見つからず、上記のリンクに記載されているように ack を送信できません。
これは、私のメッセージ配信情報配列にそのようなチャネルがないためです。
それが欠けているのはどうしてだろうか。
編集:基本的なgetのコードスニペット
これが私のメッセージの var_dump です:(黄色の部分)
l
php - amqp が rabbitmq にアクセスできない
クライアント側から rabbitmq にアクセスしようとすると、500 内部サーバー エラーが返されます。
クライアント側とrabbitmq間の接続をテストするコードは次のとおりです。
エラーログはこちら。このような問題を解決するにはどうすればよいですか?
エラーログ :
PHP 致命的なエラー: キャッチされない例外 'PhpAmqpLib\Exception\AMQPRuntimeException' とメッセージ 'サーバーへの接続エラー (13): 許可が拒否されました' が /var/www/html/mydir/vendor/videlvaro/php-amqplib/PhpAmqpLib/Wire/IO にある/StreamIO.php:27\nスタック トレース:\n#0 /var/www/html/mydir/vendor/videlvaro/php-amqplib/PhpAmqpLib/Connection/AMQPStreamConnection.php(21): PhpAmqpLib\Wire\IO\StreamIO- >__construct('ip アドレス', 15672, 3, 3, NULL)\n#1 /var/www/html/mydir/send.php(13): PhpAmqpLib\Connection\AMQPStreamConnection->__construct('ip アドレス', 15672, 'guest', 'guest')\n#2 {main}\n 27 行目の /var/www/html/mydir/vendor/videlvaro/php-amqplib/PhpAmqpLib/Wire/IO/StreamIO.php でスローされます