我使用Celery和RabbitMQ作为经纪人。
创建Celery应用程序实例的代码是
from celery import Celery
name = __file__.split('.')[0]
app = Celery(name)
app.config_from_object('celery_config')
@app.task
def fetch_url(url):
resp = requests.get(url)
print resp.status_code
@app.task
def post(url, **kwargs):
body = kwargs.get(payload)
auth = kwrags.get(auth)
resp = requests.put(url, data=body, auth=auth)
现在我想拥有2个独立的队列,一个用于GET,一个用于POST。
现在我知道我必须在celery配置模块中定义2个队列,如
CELERY_QUEUES = (
Queue('default', Exchange('default'), routing_key='default'),
Queue('get', Exchange('get')),
Queue('post', Exchange('post')),
)
我没有得到的正是为' routing_key'指定的字符串。选项?它应该是任务的名称(在这种情况下是get& post)还是有定义routing_key的规则?
答案 0 :(得分:0)
无需为您的案例定义队列或处理简单任务路由的路由键,绑定或交换。现在使用自动路由(http://docs.celeryproject.org/en/latest/userguide/routing.html#automatic-routing)
进行了大大简化(版本4.1) @app.task(name='get_task')
def fetch_url(url):
@app.task(name='post_task')
def post(url):
task_routes = {
'get_task': {'queue': 'get_queue'},
'post_task': {'queue': 'post_queue'}
}
由于默认情况下启用了task_create_missing_queues配置,因此芹菜将负责为您创建队列。