私は、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 です
どうもありがとう