博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django_rq无法监听两个队列问题
阅读量:5072 次
发布时间:2019-06-12

本文共 1654 字,大约阅读时间需要 5 分钟。

  django_rq是为django集成redis队列,这个用的少,一般会选择celery,没办法项目中用到了。用起来很简单,配置可以参考官方文档:https://pypi.org/project/django-rq/

  settings.py 只需要配置如下:

  

INSTALLED_APPS =(#other apps “django_rq”,)RQ_QUEUES = {'default': {'HOST': 'localhost','PORT': 6379,'DB': 0,'PASSWORD': 'some-password','DEFAULT_TIMEOUT': 360,},'with-sentinel': {'SENTINELS': [('localhost', 26736), ('localhost', 26737)],'MASTER_NAME': 'redismaster','DB': 0,'PASSWORD': 'secret','SOCKET_TIMEOUT': None,},'high': {'URL': os.getenv('REDISTOGO_URL', 'redis://localhost:6379/0'), # If you're on Heroku'DEFAULT_TIMEOUT': 500,},'low': {'HOST': 'localhost','PORT': 6379,'DB': 0,}}RQ_EXCEPTION_HANDLERS = ['path.to.my.handler'] # If you need custom exception handlers

 

  遇到的问题1【keyerror:default】:线上的队列配置如下:

 

RQ_QUEUES = {    '{q}high': {        'HOST': '127.0.0.1',        'PORT': 6379,        'DB': 0,        'DEFAULT_TIMEOUT': 360,        'SOCKET_KEEPALIVE': True,    },    '{q}default': {        'HOST': '127.0.0.1',        'PORT': 6379,        'DB': 0,        'DEFAULT_TIMEOUT': 360,        'SOCKET_KEEPALIVE': True,    },}

 

  {q}无法识别,于是删掉{q},项目就可以启动起来(后面版本降级后队列启动跟名无关,带{q}也可以)。

  遇到的问题2【进入high队列的job只能入队,无法出队列】,在排查日志的时候发现:

# 线上日志如下:2016-11-02 11:44:08,883 *** Listening on {q}high, {q}default...2016-11-02 11:44:08,883 Sent heartbeat to prevent worker timeout. Next one should arrive within 420 seconds.# 自己的日志为:2016-11-02 11:44:08,883 *** Listening on default...

  并没有去监听high队列,于是有部分任务无法去执行。

  最后,代码各个配置都对了一遍,上git找到django_rq源码,依赖包的版本也很重要,果不其然,线上是直接git安装的一个未发布的版本0.9.2.1,我是安装最新版本0.9.3,可以发现django_rq更新竟然不是向前兼容的,无耐^~^,我只好降级为django_rq==0.9.2,日志监听变为两个队列,一切正常了。

 

转载于:https://www.cnblogs.com/NolaLi/p/9816521.html

你可能感兴趣的文章