問題タブ [pika]

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 投票する
2 に答える
11430 参照

python - pikaで使用する接続の形式

私はpikaを使用するときにどの形式の接続を使用すべきかを理解しようとしてきましたが、私が理解している限り、2つの選択肢があります。

BlockingConnectionまたはのいずれかSelectConnectionですが、これら2つの違いについてはよくわかりません(つまり、BlockingConnectionブロッキングとは何ですか?など)

のドキュメントにpikaSelectConnection、「select、epoll、kqueue、pollなどの複数のイベント通知方法」が用意されているため、rabbitに接続するための推奨される方法であると記載されています。

では、これら2つの異なる種類の接続の意味は何でしょうか。

PS:タイトルにタグを付けるべきではないことは知っていますが、この場合、質問を明確にするのに役立つと思います。

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

python - キューが宣言されていないメッセージの生成と消費

メッセージを生成し、キューを宣言したり、basic_publishで言及したりせずに送信した場合、メッセージはどこに(ウサギで)保存されますか?使用する必要のあるコードは次のようになります。

私は自分の能力をウェブで調べましたが、これに対する答えは見つかりませんでした。このメッセージが消費されない限り、ウサギがキューを作成するという予感があります。このキューを宣言してから数回(数千!?)破棄する必要がある場合、ウサギにとってこれはかなり重いのではないかと心配しています。 1分/時間あたりの回数。

0 投票する
2 に答える
2010 参照

python - pika を使用して rabbitmq 経由でファイルを送信するには?

私はrabbitmqのチュートリアルに目を通し、便利だと思いました。

しかし、pikaを使用してrabbitmq経由でファイルを送信する方法を説明するドキュメントが見つかりません.

コード例が優先され、pika 以外の他のライブラリも受け入れられます。

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

rabbitmq - rabbitmq+pikaでパブリッシャーのタイムアウトを行う方法

rabitmqがフロー制御を実装しているため、メッセージの公開が遅くなる可能性があるため、タイムアウトを使用するにはどうすればよいですか。また、pikaは発行者の確認も実装していないため、コードの発行にはどの言語とライブラリが推奨されますか

0 投票する
3 に答える
7827 参照

python - channel.declare_queueを実行すると、Pikaワーカーが例外をスローします

私は、RabbitMQブローカーからのジョブメッセージを受け入れてジョブを処理し、結果を別のサーバーに返すPythonクライアントを作成しています。RabbitMQブローカーにメッセージを送信するスクリプトは正常に起動しますが、channel.declare_queue(queue ='task_queue')を実行すると、ワーカーが次のエラーをスローします。

pika.exceptions.AMQPChannelError:(406、"PRECONDITION_FAILED-vhost'/'のキュー'task_queue'のパラメーターは同等ではありません")

クライアント:

RabbitMQと相互作用するサーバーメソッド:

どんな助けや洞察も大歓迎です。

編集:上記のコードでエラーが発生した理由を発見しました。メッセージを公開するときにdelivery_mode=2を指定していましたが、キューを宣言したときに、Durable=Trueパラメーターを追加するのを忘れました。

0 投票する
2 に答える
3600 参照

python - rabbitmq ルーティング機能を使用してメッセージがキューに発行されたかどうかを知る方法

私は、rabbitmq を使用して通信するプロジェクトに取り組んできました。最近、ラビット ルーティング機能を使用すると、スケーラビリティが大幅に向上することがわかりました。したがって、基本的には、キューを複数のルーティング キーにバインドし、 type の exchange を使用しますdirect

パブリッシュ/サブスクライブのように機能します。そのため、キューをさまざまなイベントにバインドおよびバインド解除して、コンシューマー/サブスクライバーが関心のあるメッセージのみを受信できるようにすることができます。

もちろん、プロデューサー/パブリッシャーはバインディング キー (イベント名) を使用しrouting_keyて pika 実装に渡します。ただし、存在しないバインディングに対して何かを発行すると、メッセージは失わfooれますpika.basic_publish(..., routing_key='foo')

だから私の質問は:

メッセージが実際にキューに発行されたかどうかを知ることは可能ですか?

私が試したこと:

  • pika.basic_publish の戻り値を確認しています。常に を返しますNone

  • 存在しないバインディングを発行しようとしたときに例外があるかどうかを確認します。なにもない。

  • 帯域外制御を行うための追加のキューを持つ (すべてのサブスクライバーが同じプロセスによって実行されるため)。このアプローチは私にとって理想的ではありません。

追加情報

  • このルーティング機能を使用しているため、キュー名は rabbit によって生成されます。新しいアプローチでキュー自体に名前を付けなければならない場合でも、問題はありません。

  • キューの代わりにエクスチェンジへのバインドを必要とする新しいアプローチが提案された場合は、それを聞きたいと思いますが、実際には AMQP ではなく、rabbitmq によって実装された拡張であるため、避けたいと思います。

  • ピカバージョンは0.9.5です

  • rabbitmq のバージョンは 2.8 です

どうもありがとう

0 投票する
2 に答える
2170 参照

python - 複数のコンシューマーへのRPC呼び出し

メッセージをリッスンするコンシューマーがあります。メッセージのフローがコンシューマーが処理できる以上の場合、このコンシューマーの別のインスタンスを開始したいと思います。

しかし、消費者からの情報をポーリングできるようにしたいので、ファンアウト交換を使用してすべてのプロデューサーがRPC呼び出しを取得できるように、RPCを使用してプロデューサーにこの情報を要求できると考えました。

私の質問は、まず第一にこれは可能であり、第二にそれは合理的ですか?

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

rabbitmq - Pika + RabbitMQ:basic_qosをprefetch = 1に設定しても、キュー内のすべてのメッセージを消費しているように見えます

それぞれがRabbitMQキューにフックする10個のワーカーを起動するPythonワーカークライアントがあります。このようなビット:

私が抱えている問題は、チャネルにbasic_qosを設定しているにもかかわらず、最初に開始したワーカーがキューからすべてのメッセージを受け入れ、他のワーカーはアイドル状態になっていることです。これはrabbitmqインターフェースで確認できます。1に設定worker_countして50個のメッセージをキューにダンプした場合でも、50個すべてが「未確認」バケットに入れられますが、1個は未確認になり、他の49個は準備。

なぜこれが機能しないのですか?

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

timeout - RabbitMQでのPikaタイムアウトの問題

Pikaでタイムアウトエラーが発生する問題が発生しています。同じコード(以下)は他の環境でも正常に機能しますが、この環境では失敗します。

rabbitmqctlステータス

誰かがこれを前に打ったことがありますか?これはrabbitmq構成の問題だと思います

0 投票する
2 に答える
2447 参照

rabbitmq - Pika 0.9.5 を使用して RabbitMQ に大きなメッセージを送信する: メッセージが Rabbit によってサイレントにドロップされる

結果を受け取ってRabbitMQメッセージキューに投稿するセロリタスクがたくさんあります。投稿される結果は非常に大きくなる可能性があります (最大で数メガ)。RabbitMQ メッセージに大量のデータを入れることが良いアイデアかどうかについては意見が分かれていますが、私は他の状況でこの作業を見てきました.メモリが制御されている限り、うまくいくようです.

しかし、私の現在の一連のタスクでは、うさぎは大きすぎると思われるメッセージをドロップしているようです。私はそれをかなり単純なテストケースに減らしました:

3 ノードの RabbitMQ クラスターと、mq.example.com各ノードへのラウンド ロビンがあります。クライアントは Ubuntu 12.04 で Pika 0.9.5 を使用しており、RabbitMQ クラスターは Erlang R14B04 で RabbitMQ 2.8.7 を実行しています。

このスクリプトを実行すると、print ステートメントが出力され、例外が発生することなく終了します。このメッセージは RabbitMQ には表示されません。

に変更Nする10000と、期待どおりに動作します。

なんで?