Django ,Celery 工程配置
项目介绍
在接口服务中,如果遇到后台处理时间比较长的需求,可以考虑使用celery 这样异步消息处理机制。一般在使用celery时都需要搭配使用一个broker, 本项目是使用的公司已有的rabbitmq,故对rabbitmq 这块没有太多实践,本文就简单略过。
Django 与 Celery在部署时,是以两个独立的进程部署的, Django 负责接收消息,并发送到broker , celery 负责轮询读取broker中的消息,并及时处理。所以在使用Jenkins 部署时,需要两套jenkins Pipline.而在使用Celery时,消息缓存机制(Broker) 可以是redis,也可以是RabiitMq (具体可以参照:https://docs.celeryproject.org/en/stable/getting-started/first-steps-with-celery.html#id3).
包的引入
在Django中引入的celery包的版本为:
Django==1.11.29 celery==4.3.1
在Django中使用celery
配置broker 我在开发中是直接使用的公司提供的rabitMQ,所以Celery配置文件这块,主要是告知celery ,mq的地址,具体的配置如下:
CELERY_RABBITMQ_HOST = "rabbitmq.i.test.sz.xxxx.io"
CELERY_RABBITMQ_PORT = 5672
CELERY_RABBITMQ_USER = "ssc-data"
CELERY_RABBITMQ_PASSWORD = "*******"(密码加密了!!!)
CELERY_RABBITMQ_VHOST = 'ssc-data-test’
在celery中需要引入Django
由于在celery任务中会用到一些Django的能力,比如:ORM等,所以在celery中启动时,需要加载Django,需要加载DJANGO_SETTINGS_MODULE。
总体说来,程序的启动为:在deploy 文件夹下的 通过:command=celery worker -A celery_tasks -l info -f /dev/stdout -Q shopee-ssc-data-spx-export -c 4 -P gevent 启动程序。在这种启动模式下,主要有以下四个步骤:
- 创建一个用于存放celery的文件夹 比如 celery_tasks。
- celery_tasks 的下面 需要以tasks 文件夹命名,将需要调用的celery任务放到这个文件夹下, 不然会报找不到未注册的方式。
- 在tasks 中创建app, 可以将Django 的配置引入。
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'data_api.settings’) #引入Django配置,不然会在运行时报找不到’DJANGO_SETTINGS_MODULE‘
app = Celery('celery_tasks')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(['celery_tasks’]) # 这个名字需要与启动程序时的名称保持一致 ’celery_tasks’,也要与放有celery任务的文件夹一致;
- 在celery 中程序的编写
这部分比较简单,在celery中程序的编写 与 传统的没有太大区别。
唯一需要主要的是在程序 开始处添加注解:@shared_task(bind=True)
在celery 中程序的编写
这部分比较简单,在celery中程序的编写 与 传统的没有太大区别。
唯一需要主要的是在程序 开始处添加注解:@shared_task(bind=True)