【问题标题】:RabbitMQ management - 404 when loading a queue or exchangeRabbitMQ 管理 - 加载队列或交换时出现 404
【发布时间】:2019-02-15 10:41:48
【问题描述】:

我已通过 Google Cloud Platform 的市场将 RabbitMQ 安装到我的 Kubernetes 集群。

我可以在 Kubernetes 集群中托管的其他应用程序中很好地连接到它,我也可以毫无问题地创建队列并从中设置消费者。

我可以临时端口转发端口 15672,以便我可以从我的机器访问管理用户界面。我可以正常登录,并且在访问他们的页面时会得到队列和交换的列表。但是,一旦我选择了一个队列或交换器来加载该特定项目,我就会收到 404 响应和以下消息。我在尝试添加新队列时得到相同的结果。

Not found
The object you clicked on was not found; it may have been deleted on the server.

它们肯定存在,因为当我返回列表页面时,它们就在那里。这真的很令人沮丧,因为通过简单地使用 RabbitMQ 管理将消息发布到队列来测试我的微服务会很好,但我目前被阻止这样做!

任何帮助将不胜感激,谢谢!

编辑
为清楚起见提供了一个屏幕截图(单击列表中的队列后):

如果我尝试添加新队列,我不会收到该消息,而是收到 405。

【问题讨论】:

  • 当您说“端口转发”时,您是指来自容器还是通过代理?我很想知道您的网络浏览器中的“网络”跟踪开发工具显示了什么。
  • 能否提供截图?
  • @LukeBakken 我正在使用 gcloud 控制台并运行 kubectl port-forward -etc。
  • @AhmetB-Google 我现在添加了截图
  • @LloydPowell 我完全理解你的决定。我会试着玩弄它,如果我找到什么我会在这里。感谢您的回答!

标签: kubernetes google-cloud-platform rabbitmq google-kubernetes-engine


【解决方案1】:

今天早上我遇到了和你一样的问题,我用下面的配置解决了这个问题:

server {
    listen 80;
    server_name rabbitmq.o2c.ovh;
    access_log acces.log;
    error_log error.log;
    location / {
        client_body_buffer_size 128k;
        proxy_send_timeout   90;
        proxy_read_timeout   90;
        proxy_buffer_size    4k;
        proxy_buffers     16 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
        proxy_connect_timeout 30s;
        proxy_pass   http://localhost:15672;
        proxy_set_header   Host   $host;
        proxy_set_header   X-Real-IP  $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

【讨论】:

    【解决方案2】:

    检查内部 URL,它应该可以按预期工作,否则您的 .yml 文件将无法访问您的 definitions.json

    【讨论】:

      【解决方案3】:

      这是因为默认的虚拟主机是'/'。当您访问交换/队列页面时,RabbitMQ 管理员在 URL 中使用它。 URL 将其编码为“%2F”。但是,入口控制器(在我的例子中是 nginx)将其转换回“/”,因此管理应用无法找到该 URL(因此是 404)。

      我想出的解决方法是将 rabbitmq 中的 default_vhost 设置更改为不带“/”的内容(例如“vhost”)。

      在我正在使用的 bitnami rabbitmq Helm chart 中,这是使用:

      rabbitmq:
        extraConfiguration: |-
          default_vhost = vhost
      

      您必须更新您的客户端以明确指定这个新的虚拟主机,尽管它们通常默认使用“/”。在 Spring Boot 中,这就像添加一样简单:

      spring:
        rabbitmq:
          virtual-host: vhost
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-30
        • 2017-08-21
        相关资源
        最近更新 更多