RabbitMQ 有不可见的队列消息

RabbitMQ has non-visible queues messages

在过去的几天里,我的 RMQ 服务器一直在累积从未从队列中清除的消息。我正在使用 RMQ 作为 celery 任务代理,并且消息在主 celery worker 队列中累积:

当任务通过管道进入、处理它们然后再次进入空闲状态时,队列会间歇性地切换到活动状态。然而,这 21 条消息永久存在。当我点击 celery 队列 UI 并尝试查找这些消息进行检查时,我被告知我的队列是空的:

我已经尝试通过 URL 端点 https://<user>:<password>@<host url>/api/queues/%2f/celery 检查消息。我可以在 message_stats 部分看到有 21 条消息,但我无法单独检查这些消息:

 'message_stats': {'ack': 274597,
  'ack_details': {'rate': 0.0},
  'deliver': 274634,
  'deliver_details': {'rate': 0.0},
  'deliver_get': 274634,
  'deliver_get_details': {'rate': 0.0},
  'deliver_no_ack': 0,
  'deliver_no_ack_details': {'rate': 0.0},
  'get': 0,
  'get_details': {'rate': 0.0},
  'get_empty': 0,
  'get_empty_details': {'rate': 0.0},
  'get_no_ack': 0,
  'get_no_ack_details': {'rate': 0.0},
  'publish': 274618,
  'publish_details': {'rate': 0.0},
  'redeliver': 16,
  'redeliver_details': {'rate': 0.0}},
 'messages': 21,
 'messages_details': {'rate': 0.0},

我有两个问题:

  1. 我应该使用任何其他 RMQ API 端点来进行个人级别的消息检查吗?我试图避免仅仅为了调试目的而启动花服务器。
  2. 为什么这 21 个任务无法通过 UI 检查,或者为什么它们似乎只是无所事事地堆积在这个队列中,这有什么明显的原因吗?

剩下的消息是 unacked,这意味着它们被发送给了一些尚未确认它们的消费者。

如果您手动关闭队列连接或未能从管理中确认它们的消费者 UI,他们应该恢复到 ready 状态并准备好再次使用。