使用rabbitmqadmin创建RabbitMQ队列时返回“未找到”

问题描述 投票:0回答:2

我需要从命令行创建一个 RabbitMQ 队列。

  1. 我在 kubernetes 中有一个 RabbitMQ 设置。
  2. 我登录到 RabbitMQ pod 并获取版本 3.8.14 的rabbitmqadmin
  3. 我运行这个:

./rabbitmqadmin -u user1 -p password1 -N [email protected] declare queue name=CompName.Player1

但是我没有添加队列,而是得到:

**未找到:/api/queues/%2F/CompName.Player1

我尝试了这些,但没有成功,运行这些rabbitmqadmin命令时,rabbitmq日志也没有显示任何事件:

 ./rabbitmqadmin declare queue name=Test1

./rabbitmqadmin -u user1 -p password1 declare queue name=CompName.Player1

curl -i -u user1:password1 -H "content-type:application/json" -XPUT -d'{"durable":true}' http://localhost:15672/api/queues/%2f/CompName.Player1

通过管理 Web UI 手动添加队列是可行的,但这不是 kubernetes 解决方案的选项。

kubernetes rabbitmq rabbitmqadmin
2个回答
3
投票

我明白了。我认为在某个时候 API 端点已更新,因此所有调用都必须转到 http://localhost:15672/rabbitmq/api。这是导致问题的添加配置行:

management.path_prefix = /rabbitmq

以下是工作示例:

./rabbitmqadmin -u user1 -p password1 --path-prefix=http://localhost:15672/rabbitmq declare queue name=CompName.Player1

curl -i -u user1:password1 -H "content-type:application/json" -XPUT -d'{"durable":true}' http://localhost:15672/rabbitmq/api/queues/%2f/CompName.Player1

这也有效:

import pika
import sys
connection = pika.BlockingConnection(
    pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='CompName.Player1', durable=True)
connection.close()```

0
投票

也有类似的问题,我只是将不适合 URL 的默认虚拟主机名称

/
重命名为其他名称,例如
default
,之后它的工作就像魅力一样。

有些东西可能不喜欢 URL 转义的斜线,

%2F
...

您可以在 RabbitMQ

json
定义文件中声明您的虚拟主机,如下所示:

{
  "rabbit_version": "3.12.12",
  "rabbitmq_version": "3.12.12",
  "product_name": "RabbitMQ",
  "product_version": "3.12.12",
  /* ... */
  "vhosts": [
    {
      "name": "default"
    }
  ],
  "queues": [
    {
      "name": "CompName.Player1",
      "vhost": "default",
      "durable": true,
      "auto_delete": false,
      "arguments": {}
    }
  ]
  /* ... */
}

并参考

definitions.json
中的
/etc/rabbitmq/rabbitmq.conf

load_definitions = /etc/rabbitmq/definitions.json
© www.soinside.com 2019 - 2024. All rights reserved.