1

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

... bunch of setup code (no queue declaring tho)...
channel.exchange_declare(exchange='name', type='direct')
channel.basic_publish(exchange='exch_name', routing_key='rkey', body='message' )
conn.close()

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

4

1 に答える 1

1

あなたが公開するとき、あなたがしているように、あなたは(通常)取引所に公開します。取引所は、そのメッセージをどう処理するかを決定します。メッセージとは何の関係もない場合、メッセージは破棄されます。メッセージに関係がある場合は、それに応じてルーティングされます。

キューが宣言されていない元のコードスニペットでは、メッセージは破棄されます。

あなたがあなたのコメントで言うように、プロデューサーによって作成されたキューがありました。ここには、まだ述べていないオプションがあります。私は可能性を実行しようとします。通常、コンシューマーでキューを宣言します。ただし、コンシューマーにすべてのメッセージが表示されるようにする場合は、キューをプロデューサーが作成し、プロデューサーが交換にバインドして、すべてのメッセージがこのキューに収まるようにする必要があります。次に、キューがコンシューマーによって消費されると、すべてのメッセージが表示されます。または、コマンドラインまたは管理GUIを使用して、コードから外部に非自動削除キューとして、場合によっては永続キューとしてキューを作成することもできます(これにより、RabbitMQを再起動してもキューが保持されます)。

キューと交換は永続的ではなく、耐久性があるかどうかはわかりません。つまり、RabbitMQを再起動した後に存在します。キューには自動削除機能があるため、コンシューマーがキューから切断されると、キューは存在しなくなります。

メッセージは永続的である可能性があるため、キューにルーティングされる交換にメッセージを送信しても、メッセージは読み取られず、RabbitMQが再起動されても、再起動時にメッセージはそのまま残ります。キューが永続的でない場合、メッセージが永続的でなくても、メッセージは失われるか、メッセージが最初にキューにルーティングされない場合です。

キューを作成した後、メッセージのルーティングキーとして使用しているのと同じキーを使用して、キューを交換に適切にバインドするようにしてください。

于 2012-08-20T13:12:16.423 に答える