OpenStack使用RabbitMQ作为消息传递系统。为此有多个交换和队列。我发现用于消息传输的名为“ topic”类型的名为“ nova”的交换。Exchange使用路由键将邮件路由到队列(http://www.rabbitmq.com/tutorials/amqp-concepts.html)。 (位于http://www.rabbitmq.com/img/tutorials/intro/hello-world-example-routing.png的有用图片-信誉不足,无法在此处发布) OpenStack中有多个队列,例如计算,证书,网络等。他们使用具有相同名称的路由密钥。因此,我使用这些路由键创建了几个新队列,以将它们与处理消息的使用者绑定在一起。例如,存在一个名为“计算”的队列,该队列使用名为“计算”的路由键。我创建了使用相同路由键的新队列“ my_compute”。正如我认为的那样,我会收到消息。我有一些连接交流的代码,创建了队列和使用者。def connect(params):connection = kombu.Connection(hostname=params['host'])exchange = kombu.entity.Exchange(name=params['exchange_name'], type=params['exchange_type'], durable=params['exchange_durable'], auto_delete=params['exchange_auto_delete'], internal=params['exchange_internal'])queue_list = []for queue in params['queues_params']:queue_list.append(kombu.messaging.Queue(name=queue['name'], exchange=exchange, routing_key=queue['routing_key'], channel=connection.channel(), durable=queue['durable'], auto_delete=queue['auto_delete']))consumer = kombu.messaging.Consumer(channel=connection.channel(), queues=queue_list, no_ack=True, callbacks=[self._process_message])consumer.consume()return connection工作正常 但是我只收到网络队列的消息。我不知道还有其他消息,但看起来好像还有。我对吗?还是出了什么问题?还有其他消息,我该如何获取?
2 回答

人到中年有点甜
TA贡献1895条经验 获得超7个赞
该代码在此开发周期中正在进行一些积极的更改,但此刻我断言您正在深入研究。对于大多数nova组件,队列接口是在这些组件使用的RPC公共库下面抽象出来的,该库选择主题和队列。
特别是,当RPC代码要将消息发送到特定的计算,网络或存储主机时,主题也可以是特定于主机的。您在上面看到的唯一消息是常规广播消息,实际上,通常是对浮动IP地址信息的请求。
如果您想要一个示例,将所有消息都挂在队列中,则绝对应该查看Ceilometer,它旨在实现此目的,并利用也嵌入在nova和相关组件中的通知系统。它不会像拦截和解释新星,网络和煤渣消息那样为您提供相同的东西-如果有用的话,这取决于您的总体目标。

紫衣仙女
TA贡献1839条经验 获得超15个赞
在queues_params中的routing_key中,您指定了“ network”,这就是为什么仅接收网络消息的原因。您可以使用通配符routing_key“#”捕获与相应主题交换关联的所有消息。如果可以的话,您可以看到我的备忘。
添加回答
举报
0/150
提交
取消