任务队列:
在配置文件中设置CELERY_QUEUES和CELERY_ROUTES
CELERY_QUEUES = (
Queue('task1',Exchange('task1',type='direct'),routing_key='task1'),
Queue('task2',Exchange('task2',type='direct'),routing_key='task2'),
Queue('task3',Exchange('task3',type='direct'),routing_key='task3')
)
CELERY_ROUTES = {
'task.task1':{'queue':'task1','exchange':'task1','routing_key':'task1'},
'task.task2':{'queue':'task2','exchange':'task1','routing_key':'task2'},
'task.task3':{'queue':'task3','exchange':'task3','routing_key':'task3'},
}
四种交换器:
direct: 通过routingKey和exchange决定的那个唯一的queue可以接收消息
fanout: 所有bind到此exchange的queue都可以接收消息
fanout是一种发布/订阅模式的交换器,当你发送一条消息的时候,交换器会把消息广播到所有附加到这个交换器的队列上
routing_key可以省略
topic:和direct类似,但是在匹配规则上进行了扩展
routing key为一个点号“. ”分隔的字符串(我们将被点号“. ”分隔开的每一段独立的字符串称为一个单词),如“*.task.*”、"*.*.email"、“*.add”
binding key与routing key一样也是句点号“. ”分隔的字符串
binding key中可以存在两种特殊字符“*”与“#”,用于做模糊匹配,其中“*”用于匹配一个单词,“#”用于匹配多个单词(可以是零个)
例
#.a会匹配a.a,aa.a,aaa.a等
*.a会匹配a.a,b.a,c.a等
注:使用RoutingKey为#,Exchange Type为topic的时候相当于使用fanout
-