【问题标题】:RabbitMQ - Random queues with name "amq.gen-*" getting autogeneratedRabbitMQ - 自动生成名为“amq.gen-*”的随机队列
【发布时间】:2014-04-07 07:54:10
【问题描述】:

我设置了从服务器(NodeJS)向持久队列发送消息,客户端(Android 应用程序)监听各自队列上的消息(每个 android 设备监听其对应的唯一队列)。

根据 RabbitMQ 文档,当我们尝试连接到具有空名称(即“”)的队列时,RabbitMQ 会生成一个名称以“amq.gen-”开头的随机队列。但是,我从客户端或服务器代码中看不到我正在尝试连接到具有空名称的队列,但仍然看到生成了许多随机队列。

谁能帮助我了解其他哪些场景可能会创建名为“amq.gen-*”的随机队列?

【问题讨论】:

    标签: android node.js rabbitmq


    【解决方案1】:

    如果您使用空白名称创建队列,则会生成一个随机队列名称amq.gen-*。 如果您使用空白名称连接到队列,则根据方法,将使用最后在此通道上声明的队列名称。如果没有声明队列或方法不支持空白队列名称,则会抛出错误。

    有关详细信息,请参阅 queue.declare methoddomain.queue-name domain 文档。

    【讨论】:

    • 提问者想知道为什么在系统使用真实队列名称时会创建这些自动命名的队列。我也想知道,因为我有同样的情况。
    • @JamesK 正如它在原始答案中所写的那样,当用户创建具有空名称的队列时,RabbitMQ 会自行生成该名称并将 amqp.gen- 作为前缀以表示该队列名称是自动生成的。请按照上面答案中的链接并在那里搜索“生成”和“amq”。为了获得更多的背景信息,希望它会有所帮助。
    • PS:这样的队列可能是独占的或具有自动删除功能的队列应该是短暂的,并且在完成工作后将被删除。在这种情况下,命名它们没有意义,用户可能或必须(取决于特定用例)依赖服务器命名逻辑。
    • 100% 正确 - 我发现代码中的回复队列创建时没有名称,因为它们不需要名称。一直想知道这些自动命名的队列是从哪里来的,这个答案对我帮助很大,因为它是正确的。谢谢。
    【解决方案2】:

    如果在应用程序中您将空字符串作为队列名称传递,RabbitMq 生成随机名称队列(amq.gen-*)请检查 RabbitMq 配置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 2016-08-21
      • 2014-03-30
      • 2022-01-20
      相关资源
      最近更新 更多