問題タブ [node-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 に答える
587 参照

node.js - amqp rabbitmq チャネル スコープ

私は node.js で amqplib を使用していchannelsます。

これは、amqplib のドキュメントからのものです。Channels are multiplexed over connections, and represent something like a session, in that most operations (and thereby most errors) are scoped to channels.

amqp 接続を開き、チャネル、交換、およびキューを作成する基本的なコードを次に示します。

上記のコードでは、それらが定義されたチャネルにのみ存在しますかexchange '1'? つまり、別のチャネルqueue 'a'から交換するメッセージを公開する場合、交換は引き続きメッセージをルーティングしますか?aa

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

node.js - amqp.node が接続の切断を検出しない

クライアントがRabbitMQキューからメッセージを消費するsocket.ioサーバーを実行するnode.jsスクリプトがあります。最近、Amazon AWS に移行し、RabbitMQ は 2 台のマシン (冗長インスタンス) のクラスターになりました。AMQP 接続はときどき失われます (これは、冗長な VM を備えた高可用性環境から生じる制限であり、対処する必要があります)。再接続が試行されると、DNS は接続先のインスタンスを選択します (これはデータ レプリケーションを備えたクラスターであるため、どのインスタンスに接続するかは問題ではありません)。

問題は、再接続が試行されないことです。しばらくして接続が失われると、amqp.node は接続が失われたことに気付かないようです。また、コンシューマーはメッセージの受信を停止し、socket.io サーバーは単に新しい接続の受け入れを停止します。

RabbitMQ URL に 55 秒のハートビート タイムアウト (socket.io ハートビート タイムアウトと混同しないでください) が設定されており、amqp.node のコールバック API で「エラー」および「クローズ」イベントをチェックしていますが、それらは明らかに発行されていません。キューは、消費されたメッセージが確認応答されることを期待しています。ノードスクリプトが接続の切断を検出して終了するようにしたいので、環境は自動的に新しいプロセスを開始し、接続を再度確立します。

コードは次のとおりです。おそらく、amqp.node コールバック API などで何か問題が発生しています。

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

node.js - Cannot connect to an exchange in rabbitmq

I'm trying to achieve something very simple - connect to a RabbitMQ exchange and consume messages. I'm using https://github.com/postwait/node-amqp. Here's the NodeJS code.

However, when I run the server, the line console.log('Connected to RabbitMQ') gets executed repeatedly forever. Of course, this behavior disappears when I remove var exchange = connection.exchange('foobar').

I'm fairly new to NodeJS, and I've tried reading up the docs and Googling around for example code, but nothing works. What am I missing?

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

node.js - node-amqp ライブラリを使用した RabbitMQ の exchange.publish() ごとにチャネルが増加し続けます

nodejs プロジェクトに node-amqp ライブラリを使用しています。問題を github プロジェクト ページにも投稿しました。

新しいチャネルを作成し続け、それらは永遠にアイドル状態のままです。1 時間後、チャネルは ~12000 になりました。交換と公開のオプションを確認しましたが、これまでのところ解決に近づいていません.

コードの何が問題になっていますか、また、問題に対する rabbitmq サーバーのオプション/設定はありますか?

サンプルコードは次のとおりです。

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

rabbitmq - Rabbitmq: envelop.message.body と envelop.message.pool の違い

私は 1 つのプロデューサーに基づいてnodejsおり、使用した javascript ライブラリはamqp.nodeであり、コンシューマーはC ライブラリによって実装されています。

rabbitmq 管理 Web から、メッセージがキューにプッシュされ、コンシューマーに配信されることがわかります。ただし、コンシューマーではamqp_consume_messagereturnは null です。この場合、どうすればデバッグできますか?AMQP-RESPONSE-NORMALenvelop.message.body

これがrabbitmqからのメッセージを消費するための私のコードです

アップデート

さらに調査した結果、これらのメッセージはenvelop.message.pool.pages. との違いを知りmessage.bodyたいmessage.pool

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

node.js - RabbitMQ (node-amqp 経由): 未処理の接続エラー: UNEXPECTED_FRAME - クラス 60 のコンテンツ ヘッダーが予期されていましたが、代わりに非コンテンツ ヘッダー フレームを取得しました

node-amqpを使用して RabbitMQ に接続しています。セットアップは次のとおりです。

  • 2 つの RabbitMQ サーバー (以降「ウサギ」)、1 つは「受信」、もう 1 つは「通知」と呼ばれます。
  • データは「着信」うさぎに公開され、アプリはデータベースに書き込む前に特定の数のメッセージをバッファーします (「バッファー」アプリ)。
  • 次に、バッファはこれらのメッセージを、システムの他の部分 (UI など) に通知するように設計された「通知者」ウサギに発行しようとします。

「着信」からメッセージを引き出すことは問題なく、データベースへの書き込みなどはすべて機能しますが、「通知者」への公開に関しては、最初のいくつかのメッセージを公開しようとした後に次のエラーが発生します。

接続は次のようになります。

(取引所が開かれたというメッセージが表示されるので、実際には正常に開きます。)

次に、次のようにこの取引所に公開しています。

これは、データがデータベースに書き込まれると、ループで呼び出されます。

このエラーは 1 回だけ表示されますが、RabbitMQ 管理インターフェイスを見ると、キューにメッセージがまったく発行されていません。fanoutキューの種類を からに変更しようとしましtopicたが、役に立ちませんでした。さらに、confirm: true確認コールバックが呼び出されないため、フラグは何もしていないように見えます。これは、新しいメッセージを発行する前にメッセージの確認を待つことができないことを意味します。

エラーメッセージが少しわかりにくいので、何が問題なのかわかりません。多くのものを(ほぼ)同時に公開しようとする試みに関係している可能性がありますが、確認のコールバックがなければ、これを止めることはできません...