openstack nova では、さまざまなタイプの rabbitmq コンシューマー ((例: トピック コンシューマー、node_topic コンシューマー、ファンアウト コンシューマー) が、各 nova サービス (例: nova-schedule、nova-compute など) に関連付けられています。次の行は、 https:/からの抜粋です。/github.com/openstack/nova/blob/master/nova/service.pyは、各 nova サービスに対して 3 つのコンシューマーを使用します。参考: service.py は、nova-services を生成するためのラッパーです。
self.conn.create_consumer(self.topic, rpc_dispatcher, fanout=False)
node_topic = '%s.%s' % (self.topic, self.host)
self.conn.create_consumer(node_topic, rpc_dispatcher, fanout=False)
self.conn.create_consumer(self.topic, rpc_dispatcher, fanout=True)
おそらく、各コンシューマーは異なる Rabbit Queue に関連付けられていると思います。メッセージをノードに直接送信するには、 node_topic コンシューマーが必要になる場合があると思います。各サービスの他の 2 つのコンシューマ (トピックとファンアウト コンシューマ) の目的は何でしょうか?
また、次のコマンドを使用して devstack ノードでの rabbitmq の交換を一覧表示すると、大量の (11685) メッセージが表示されます
stack@9734efd5-6fcd-4127-92b4-6715a66fda9d:/opt/stack$ sudo rabbitmqctl list_exchanges | wc -l
11685
openstack devstack実装のrabbitmqに非常に多くの交換がある理由を誰かが説明できますか?