【问题标题】:Error on using IronMQ as celery broker in Heroku在 Heroku 中使用 IronMQ 作为 celery 代理时出错
【发布时间】:2013-03-03 17:14:17
【问题描述】:

目前,我们在 Heroku 云中托管了一个 Python Django 应用程序,它使用 Celery 工作者进行后台处理。

Celery 工作人员使用 django DB 作为代理。最近我们决定使用 IronMq 作为代理,因为它是一个企业解决方案。

我们使用的包是

Python 2.7
Django 1.3
Celery 3.0.16
Django-celery 3.0.11
Iron-celery 0.3.1

我们正在使用两个工人。一个工作人员用于队列“正常优先级”,另一个工作人员用于队列“高优先级”。但是当应用程序疲于启动“HighPriority”队列的工作程序时,会触发一个错误,结果两个工作程序都崩溃了。

以下是我们用于配置 IronMQ 和 celery 队列的其他设置。

BROKER_URL='ironmq://xxxxx:xxxxx@'
CELERY_RESULT_BACKEND='ironcache://xxxxx:xxxxx@'

import os
import djcelery
import iron_celery
from kombu import Exchange, Queue
djcelery.setup_loader()


CELERY_DEFAULT_QUEUE = 'NormalPriority'
CELERY_QUEUES = {
                CELERY_DEFAULT_QUEUE: {
                                      'exchange': CELERY_DEFAULT_QUEUE,
                                      'binding_key': CELERY_DEFAULT_QUEUE,
                                      }
                }


CELERY_CREATE_MISSING_QUEUES=True
CELERY_ROUTES = {'tasks.retrieveDocketUsingWorker': {'queue': 'HighPriority'},
                'tasks.retrieveDocketFromDdUsingWorker': {'queue': 'HighPriority'}
                }

我在下面添加了一小部分错误日志。有人请看看这个。

 2013-03-14T09:21:17+00:00 app[celeryd1.1]:     self.queue_declare(nowait, passiv
   e=False)
 2013-03-14T09:21:17+00:00 app[celeryd1.1]:   File "/app/.heroku/python/lib/pytho
 n2.7/site-packages/kombu/entity.py", line 497, in queue_declare
 2013-03-14T09:21:17+00:00 app[celeryd1.1]:     nowait=nowait)
 2013-03-14T09:21:17+00:00 app[celeryd1.1]:   File "/app/.heroku/python/lib/pytho
 n2.7/site-packages/kombu/transport/virtual/__init__.py", line 401, in queue_decl
 are
  2013-03-14T09:21:17+00:00 app[celeryd1.1]:     return queue, self._size(queue),
   0
    2013-03-14T09:21:17+00:00 app[celeryd1.1]:   File "/app/.heroku/python/lib/pytho
     n2.7/site-packages/iron_celery/iron_mq_transport.py", line 78, in _size
    2013-03-14T09:21:17+00:00 app[celeryd1.1]:     return details["size"]
 2013-03-14T09:21:17+00:00 app[celeryd1.1]: **TypeError: string indices must be int
      egers**
2013-03-14T09:21:17+00:00 app[celeryd1.1]: [2013-03-14 05:21:17,631: INFO/MainPr
ocess] Celerybeat: Shutting down...
2013-03-14T09:21:18+00:00 heroku[celeryd1.1]: Process exited with status 0
2013-03-14T09:21:18+00:00 heroku[celeryd1.1]: State changed from up to crashed
2013-03-14T09:21:23+00:00 heroku[router]: at=info method=POST path=/getDocketDow
nloaderWorkerStatus/ host=www.irelanddev.com fwd="115.119.213.182" dyno=web.1 qu
eue=0 wait=0ms connect=1ms service=2447ms status=200 bytes=60
2013-03-14T09:21:26+00:00 heroku[router]: at=info method=POST path=/getDocketDow
 nloaderWorkerStatus/ host=www.irelanddev.com fwd="115.119.213.182" dyno=web.1 qu
eue=0 wait=0ms connect=1ms service=23ms status=200 bytes=60
2013-03-14T09:21:31+00:00 heroku[router]: at=info method=POST path=/getDocketDow
nloaderWorkerStatus/ host=www.irelanddev.com fwd="115.119.213.182" dyno=web.1 qu
eue=0 wait=0ms connect=1ms service=196ms status=200 bytes=60
2013-03-14T09:21:36+00:00 heroku[router]: at=info method=POST path=/getDocketDow

提前致谢。

【问题讨论】:

    标签: python django heroku celery ironmq


    【解决方案1】:

    我相信这与我以前见过的问题类似。请升级 iron_core (pip install iron-core -U)。它应该是 1.0.2 版本。

    【讨论】:

    • 谢谢帕迪。我会升级铁芯版的。
    • @SkariaArun 我假设您是我从 Iron.io 支持系统发送电子邮件的那个人。 :) 如果您确保 iron-core 和 requests 都是最新的(有时安装的多个版本的 requests 会混淆 Python,不知何故)这应该不是问题。 :) 抱歉出现问题!如果您需要帮助,请随时访问 get.iron.io/chat。
    • 感谢 Paddy 的宝贵支持。正是您从 Iron.io 支持部门发来的邮件。目前我们已将实施重新安排到稍后的某个时间。这是因为我们还有其他紧急修复要实施。我一定会升级请求模块。当我们开始实施 ironMQ 时会回复您。
    猜你喜欢
    • 1970-01-01
    • 2018-06-11
    • 2021-02-10
    • 1970-01-01
    • 2013-02-13
    • 2014-04-24
    • 2016-04-05
    • 2015-09-14
    • 1970-01-01
    相关资源
    最近更新 更多