我已通过 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。
这是因为默认虚拟主机是“/”。当您访问交换/队列页面时,RabbitMQ 管理员会在 URL 中使用此信息。 URL 编码后变为“%2F”。然而,入口控制器(在我的例子中是 nginx)将其转换回“/”,因此管理应用程序无法找到该 URL(因此是 404)。
我想出的解决方法是将rabbitmq中的default_vhost设置更改为不带“/”的内容(例如“vhost”)。
在我正在使用的bitnamirabbitmqHelm图表中,这是使用以下配置的:
rabbitmq:
extraConfiguration: |-
default_vhost = vhost
您确实必须更新客户端以显式指定这个新的虚拟主机,因为它们通常默认使用“/”。在 Spring Boot 中,这就像添加一样简单:
spring:
rabbitmq:
virtual-host: vhost
今天早上我遇到了和你一样的问题,我使用以下配置修复了它:
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;
}
}
检查内部 URL,它应该按预期工作,否则您的
definitions.json
文件将无法访问您的 .yml
。
对我来说,这是解决方案:
location /rabbitmq/api/ {
rewrite ^ $request_uri;
rewrite ^/rabbitmq/api/(.*) /api/$1 break;
return 400;
proxy_pass http://rabbitmq-test.rabbitmq-test.svc.cluster.local:15672$uri;
}
location /rabbitmq/ {
rewrite ^/rabbitmq$ /rabbitmq/ permanent;
rewrite ^/rabbitmq/(.*)$ /$1 break;
proxy_pass http://rabbitmq-test.rabbitmq-test.svc.cluster.local:15672;
proxy_buffering off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}