V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
agentwx
V2EX  ›  Python

celery 配合 rabbitmq 进行异步任务时,发现 rabbitmq 里消息的数量是一直增加的,但是这些消息其实也已经被 task 处理掉了。

  •  
  •   agentwx · 2017-06-19 20:43:00 +08:00 · 6635 次点击
    这是一个创建于 2740 天前的主题,其中的信息可能已经有所发展或是发生改变。
    查看 rabbimtq 自带的后台,发现 Queued messages 里面,ready 和 total 的数量都达到了 5000 多,unacknowledged 的值为 0。不过实际在工作的时候,unacknowledged 的值会变化的,但是最后会变成 0
    celery 的配置也没有特殊的地方,就只设置了如下的内容
    CELERY_IMPORTS = ('testtasks',)
    BROKER_URL = 'amqp://guest:guest@localhost:5672//'
    CELERY_RESULT_BACKEND = 'amqp://'

    然后看系统的资源,erl 的进程内存比较大,大概暂用了 300 多 M
    是我这边 celery 的配置有问题么?
    15 条回复    2017-06-21 15:45:33 +08:00
    misaka19000
        1
    misaka19000  
       2017-06-19 21:29:33 +08:00 via Android
    只用过 Redis 的路过帮顶。。。
    clarkchen
        2
    clarkchen  
       2017-06-19 21:37:08 +08:00
    CELERY_RESULT_BACKEND 你要不指到 redis 里面,,,
    WangYanjie
        3
    WangYanjie  
       2017-06-19 21:42:11 +08:00
    用 countdown 了吗?
    agentwx
        4
    agentwx  
    OP
       2017-06-19 22:59:33 +08:00
    @WangYanjie 我在 task 里面做的只是调用了另外的方法,countdown 是在什么时候使用呢? 谢谢
    shellfly
        5
    shellfly  
       2017-06-19 23:07:07 +08:00
    RabbitMQ 不是自带了一个挺好用的 Management Plugin 吗,配置好了就容易看到具体是什么消息堆住了
    macroideal
        6
    macroideal  
       2017-06-20 07:28:25 +08:00 via iPhone
    处理了没 acc?
    NaVient
        7
    NaVient  
       2017-06-20 09:07:06 +08:00
    设置了消息应答了吗,消息需要 ack
    WangYanjie
        8
    WangYanjie  
       2017-06-20 10:26:23 +08:00
    unacknowledged 指的是,消息发给 consumer 了,但是没有 ack ;正常情况是会有的,如果你使用了延迟任务,会更多一点;
    agentwx
        9
    agentwx  
    OP
       2017-06-20 12:41:10 +08:00
    @WangYanjie 嗯 , 但是现在是 unacknowledged 的值是 0,那我理解的话,应该 ready 和 total 应该也没有才对。
    为啥 ready 和 total 的值是那么多,而且感觉是这个消息还是在 rabbitmq 里存着的,不然为啥进程的内存占用那么多。

    按我的理解,如果 unacknowledged 的为 0 了, 意味这消息被出来了,不会被存到某个队列里才对。
    agentwx
        10
    agentwx  
    OP
       2017-06-20 12:42:12 +08:00
    @NaVient unacknowledged 的值为 0 了,这个不是表示已经应答了么?
    agentwx
        11
    agentwx  
    OP
       2017-06-20 12:42:43 +08:00
    @macroideal acc 是怎么个处理法?求指导
    macroideal
        12
    macroideal  
       2017-06-20 13:14:37 +08:00
    @agentwx #11 就是发一个 ack,回去
    agentwx
        13
    agentwx  
    OP
       2017-06-20 20:39:08 +08:00
    已经解决了,升级了 rabbitmq 到 3.3 以上版本就可以了。
    之前用的是 rabbitmq 3.1 的版本,然后 celery 是 3.1 的版本
    WangYanjie
        14
    WangYanjie  
       2017-06-21 10:17:49 +08:00   ❤️ 1
    @agentwx unack 只是一个状态,代表有 consumer 消费了这个消息,但是还没确认;只有当 consumer 确认之后,RMQ 才不用再存储这个消息
    agentwx
        15
    agentwx  
    OP
       2017-06-21 15:45:33 +08:00
    @WangYanjie 谢谢,原来如此
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3500 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:50 · PVG 08:50 · LAX 16:50 · JFK 19:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.