You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RabbitMQ搭配Celery处理任务时如何查看队列内的任务内容?

问题背景

我在Django应用中基于RabbitMQ与Celery搭建了基础消息任务队列,按照认知,调用delay方法会将任务推送至RabbitMQ队列,随后Celery工作节点会从队列拉取任务执行。我希望在调用delay推送任务后,能在RabbitMQ管理门户查看到队列中的对应任务,但任务几乎会被瞬时拉取处理,没有机会在管理门户观测到。

已尝试操作

我曾尝试在任务方法中添加sleep计时器来延长任务停留时间,具体操作如下:

  1. 编辑tasks.py文件,执行命令:
    sudo nano tasks.py
    写入代码:
    from __future__ import absolute_import, unicode_literals
    from celery import shared_task
    import time
    
    @shared_task
    def add(x, y):
        time.sleep(100)
        return x + y
    
  2. 启动Celery应用,执行命令:
    (myprojectenv) root@ubuntu-s-1vcpu-1gb-blr1-01:/etc/myproject# celery -A myproject worker -l info
    
  3. 推送任务执行,进入Django shell操作:
    (myprojectenv) root@ubuntu-s-1vcpu-1gb-blr1-01:/etc/myproject# python3 manage.py shell
    Python 3.8.10 (default, Mar 15 2022, 12:22:08)
    [GCC 9.4.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    (InteractiveConsole)
    >>> from app1.tasks import add
    >>> add.delay(1,2)
    

此时Celery运行窗口显示已成功接收任务,日志如下:

[2022-06-10 06:16:15,182: INFO/MainProcess] celery@ubuntu-s-1vcpu-1gb-blr1-01 ready.
[2022-06-10 06:17:38,485: INFO/MainProcess] Task app1.tasks.add[be566921-b320-466c-b406-7a6ed7ab06e7] received

但我始终无法在RabbitMQ管理门户的队列中看到对应任务内容,查看的队列页面中对应队列的Ready消息数始终为0,看不到具体任务详情。

问题原因

在任务函数中添加time.sleep(100)无法让任务停留在RabbitMQ队列中。sleep逻辑是任务被Celery worker拉取到本地执行阶段才会触发,和任务在RabbitMQ队列中的停留时长没有任何关系。只要Celery worker处于正常运行状态,就会第一时间拉取队列中的待消费任务,队列里不会有堆积的待执行消息,自然看不到对应任务。

正确查看队列任务的操作方案

按以下步骤操作即可在RabbitMQ管理门户观测到队列中的任务:

  • 第一步:终止所有正在运行的Celery worker进程,确保没有消费者监听目标队列,执行命令pkill -f "celery worker"即可批量关闭所有Celery工作进程。
  • 第二步:重新进入Django shell,调用add.delay(1,2)推送任务。此时因为没有消费者拉取消息,任务会持久化留在RabbitMQ的对应队列中。
  • 第三步:打开RabbitMQ管理门户(默认地址为http://服务器IP:15672),进入Queues标签页,找到Celery默认使用的队列(通常命名为celery),点击队列名进入详情页。
  • 第四步:在详情页找到Get messages板块,将Messages参数设置为需要查看的消息数量(例如填1),Requeue参数必须选择Yes(如果选No会直接将消息从队列中移除,导致后续worker无法执行该任务),点击Get Message(s)按钮,即可看到队列中存储的完整任务内容,包括任务ID、对应执行函数、传入参数等信息。

补充提示:已经被worker拉取、正在执行的任务不会存在于RabbitMQ队列中,这类运行中任务的状态不要在RabbitMQ管理页查找,可以通过Celery官方监控工具flower查看。

内容的提问来源于stack exchange,提问作者Himanshu Poddar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 12:18:23