为了账号安全,请及时绑定邮箱和手机立即绑定

连接到OpenStack中的RabbitMQ代理

连接到OpenStack中的RabbitMQ代理

阿晨1998 2021-03-13 15:11:45
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和相关组件中的通知系统。它不会像拦截和解释新星,网络和煤渣消息那样为您提供相同的东西-如果有用的话,这取决于您的总体目标。


查看完整回答
反对 回复 2021-03-27
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

在queues_params中的routing_key中,您指定了“ network”,这就是为什么仅接收网络消息的原因。您可以使用通配符routing_key“#”捕获与相应主题交换关联的所有消息。如果可以的话,您可以看到我的备忘。


查看完整回答
反对 回复 2021-03-27
  • 2 回答
  • 0 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号