向django-RQ添加第二个队列时出现Redis连接错误该如何解决
问题排查与解决方案
你的配置本身语法和参数逻辑没有问题,多个队列完全可以共享同一个Redis实例的连接信息,不存在冲突。该报错可按以下优先级排查解决:
- 队列调用方式错误
不要直接使用rq原生的Queue()类获取pro队列,必须使用django-rq封装的方法读取配置:
原生rq的调用方法不会读取Django settings中的import django_rq # 获取pro队列实例 pro_queue = django_rq.get_queue('pro') # 提交任务 pro_queue.enqueue(你的任务函数, 参数1, 参数2)RQ_QUEUES配置,会直接报找不到Redis连接的错误,这是最常见的触发原因。 - 旧版本django-rq兼容问题
如果你使用的是2.0版本以下的django-rq,部分旧版本要求在自定义队列配置中额外显式声明'USE_REDIS_CACHE': False才能正常识别连接配置,可修改队列配置如下:if(on_heroku): RQ_QUEUES = { 'default': { 'URL': os.getenv('REDISTOGO_URL', 'redis://localhost:6379/0'), 'DEFAULT_TIMEOUT': 500, 'USE_REDIS_CACHE': False }, 'pro': { 'URL': os.getenv('REDISTOGO_URL', 'redis://localhost:6379/0'), 'DEFAULT_TIMEOUT': 500, 'USE_REDIS_CACHE': False } } else: RQ_QUEUES = { 'default': { 'HOST': 'localhost', 'PORT': 6379, 'DB': 0, 'DEFAULT_TIMEOUT': 500, 'USE_REDIS_CACHE': False }, 'pro': { 'HOST': 'localhost', 'PORT': 6379, 'DB': 0, 'DEFAULT_TIMEOUT': 500, 'USE_REDIS_CACHE': False } } - 补充验证worker启动参数
本地测试时启动worker的命令为python manage.py rqworker default pro,Heroku的Procfile中worker配置需写为worker: python manage.py rqworker default pro,确保pro队列有对应的worker承接任务。
内容的提问来源于stack exchange,提问作者JeremyE
相关产品推荐
相关产品推荐

