当前位置: 首页 > 知识库问答 >
问题:

连接到 OpenStack 中的 RabbitMQ 代理

谷出野
2023-03-14

OpenStack使用RabbitMQ作为消息传递系统。为此,有几个交换机和队列。我发现名为“nova”的“topic”类型的交换用于消息传输。Exchange使用路由密钥将消息路由到队列(http://www.rabbitmq.com/tutorials/amqp-concepts.html). (有用图像位于http://www.rabbitmq.com/img/tutorials/intro/hello-world-example-routing.png-没有足够的声誉发布在这里)OpenStack中有几个队列,如compute、cert、network等。它们使用相同名称的路由密钥。因此,我使用这些路由密钥创建了几个新队列,以便将它们与处理消息的消费者绑定。例如,有一个名为“compute”的队列使用名为“compute”路由键。我创建了使用相同路由密钥的新队列“my_compute”。因为我认为它应该工作,我会收到消息。

我有一些代码连接到exchange,创建我的队列和消费者。

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

参数“params”是从json文件获得的映射:

{
"host"                 : "xxx",
"exchange_name"        : "nova",
"exchange_type"        : "topic",
"exchange_durable"     : false,
"exchange_auto_delete" : false,
"exchange_internal"    : false,
"queues_params"        : [
    {
        "name"        : "my_compute",
        "routing_key" : "compute",
        "durable"     : false,
        "auto_delete" : false,
        "arguments"   : [ ]
    },
    {
        "name"        : "my_network",
        "routing_key" : "network",
        "durable"     : false,
        "auto_delete" : false,
        "arguments"   : [ ]
    },
    .
    .
    .

起作用了。但我只收到网络队列的消息。我不知道还有没有其他消息,但看起来有。我说的对吗?还是哪里出了问题?是否有其他消息,我如何获得它们?

共有2个答案

微生翼
2023-03-14

在queues_params中的routing_key中,您指定了“network”,这就是您只接收网络消息的原因。您可以使用通配符routing_key“#”,它捕获与相应主题交换相关联的所有消息。如果你愿意的话,你可以看看我的便条。

闻人伟
2023-03-14

这段代码在这个开发周期中正在经历一些积极的变化,但目前我断言您正在深入研究。对于大多数nova组件,队列接口被抽象到这些组件使用的RPC公共库之下,并选择主题和队列。

特别是,当RPC代码想要将消息发送到特定的计算、网络或存储主机时,主题也可以是特定于主机的。您将在上面看到的唯一消息是通用广播消息,实际上通常是对有关浮动IP地址信息的请求

如果您想要一个捕获队列中所有消息的例子,那么您肯定应该看看Ceilometer,它就是用来做这件事的,并且利用了也嵌入到nova和相关组件中的通知系统。它不会给你提供与拦截和解释nova、network和cinder消息相同的东西——如果有用的话,这取决于你的总体目标。

 类似资料:
  • 我读过这段文档: RabbitMQ自动连接/拓扑恢复 自Spring AMQP的第一个版本以来,该框架在代理失败的情况下提供了自己的连接和通道恢复。此外,如第3.1.10节“配置代理”所述,RabbitAdmin将在重新建立连接时重新声明任何基础结构bean(队列等)。因此,它不依赖amqp客户端库现在提供的自动恢复。Spring AMQP现在使用4.0。amqp客户端的x版本,默认情况下已启用自

  • 更新:将非工作版本发布到https://github.com/justsomecoder/boot-rabbit-issue 我正在尝试实现一些基本的RabbitMQ发送和接收功能,但似乎无法让它在我的Spring Boot项目中运行。虽然我尝试了多个示例,但到目前为止,我在https://spring.io/guides/gs/messaging-rabbitmq/实现了该示例,唯一的例外是我在

  • 请注意,这个问题看起来可能是这个问题的重复,但事实并非如此。下面我包括我的理性 我正在尝试将Sleuth / Zipkin跟踪添加到我的项目中。为此,我遵循了本教程。 我的项目已经在使用RabbitMQ在工作正常的不同微服务之间进行通信。 我的问题是,当我使用web连接时,我能够很好地获得跟踪,但当我尝试使用RabbitMQ通信时,我会遇到无法连接错误。 正如第一行评论的那样,我的问题似乎与rab

  • 我一直在尝试设置Spring Cloud Config Server/Client。我一直在遵循一些不同的示例(1、2)。我正确设置了客户端和服务器,并且可以成功查询localhost:8888/localhost: 8080以查看JSON格式的值。 我的问题是Spring Boot是否会自动检测Spring Cloud Config Server提供的这些属性。目前,我只是尝试在启动时连接到Ra

  • 我在vm上运行rabbitMQ服务器。我正在学习rabbitMQ java教程。它在vm上本地运行良好,但当尝试从主机发送时,我遇到了一个异常 以下是我正在使用的发送代码: 我可以ping服务器在192.168.198.100但我不能访问管理UI在192.168.198.100:15672/ 有人能帮我弄清楚这个问题出了什么问题吗?提前感谢。