我创建了一个 ScaledObject,它根据 RabbitMQ 队列中存在的请求数量来扩展 Celery 工作单元。这是在 Azure Kubernetes 服务集群中。
我使用了以下 URL,并注意到未确认的消息不包含在决定扩展 Celery Pod 的标准中。它确实适用于“就绪”消息,但这些消息消失得相当快,从而留下了 pod 是否应该扩大规模的错误指示。
amqp://用户:[电子邮件受保护]:5672
在这个KEDA教程中说:
excludeUnacknowledged - 设置为 true 以指定 QueueLength 值应排除未确认的消息(仅限就绪消息)。 (值:true、false,默认值:false、可选,仅适用于使用 http 协议的主机)
在这个 Github 线程中也明确指出,只有 HTTP 协议包含有关 RabbitMQ 的未确认消息的信息:
amqp 协议仅公开未确认的消息,要包含那些您必须使用与管理 API 对话的 http 模式。
所以,我通过将网址更改为:
来完成此操作http://用户:[电子邮件受保护]:15672
当我这样做时,我的 ScaledObject 上出现以下错误:
Warning KEDAScalerFailed 3m27s (x201 over 13m) keda-operator
error inspecting rabbitMQ:
error requesting rabbitMQ API status: 404 Not Found,
response: {"error":"Object Not Found","reason":"Not Found"},
from: http://user:[email protected]:15672/api/queues/%!F(MISSING)/celery
我认为这个问题是,当我集成 RabbitMQ 时,我将管理 url 的基本路径更改为
/management
。这样我就可以通过:FQDN/management/#/
而不是通过:FQDN/#/
访问管理仪表板。当我尝试将 /management
添加到网址后面时,它被视为 vhost 并粘贴在 /api/queues/
部分后面,如下所示:
http://用户:[电子邮件受保护]:15672/api/queues/management/celery
还有另一种方法可以检索未确认消息的数据吗?或者有没有办法让
/management/
位于网址内的正确位置?
科达版本:2.9.0, Kubernetes 版本:1.24.10