python语言
文件:config.py
from celery import Celery, Task
from kombu import Exchange, Queue, binding
exchange = Exchange('test', type='topic')
queues = [
Queue(
'queue1',
[binding(exchange=bsite_exchange, routing_key='queue1')],
queue_arguments={'x-queue-mode': 'lazy', 'x-max-priority': 10},
max_priority=10
),
Queue(
'queue2',
[binding(exchange=bsite_exchange, routing_key='queue2')],
queue_arguments={'x-queue-mode': 'lazy', 'x-max-priority': 10},
max_priority=10
)
]
# 配置交换机名,交换机类型
def route_task(name, args, kwargs, options, task=None, **kw):
exchange = options.get('exchange', 'test')
exchange_type = options.get('exchange_type', 'direct')
routing_key = options.get('routing_key', name)
return {
'exchange': exchange,
'exchange_type': exchange_type,
'routing_key': routing_key
}
celery = Celery()
config = {
'task_queues': queues ,
'broker_url': 'amqp://admin:mqadmin@127.0.0.1:30975/',
'result_compression': 'gzip',
'task_routes':(route_task,)
# 默认任务配置
'task_create_missing_queues': True,
'task_default_delivery_mode': 'persistent',
"worker_prefetch_multiplier": 4,
# 'task_track_started': True,
'timezone': "Asia/Shanghai",
'result_backend': None,
'worker_enable_remote_control': False,
}
celery.config_from_object(config)
文件:tasks.py
from config import celery
@celery.task(
name='queue1',
acks_late=True,
bind=True,
rate_limit='150/s'
)
def task1(self,a,*args, **kwargs):
print(a)
@celery.task(
name='queue2',
acks_late=True,
bind=True,
rate_limit='150/s'
)
def task2(self,a,*args, **kwargs):
print(a)
启动单个队列任务命令
celery worker -A tasks:celery -Q queue1 -l info -P gevent