大家都知道,Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,但是过程太繁琐了,先得安装Erlang,再安装rabbitmq,然后各种配置,最后由于async关键字问题还得去修改三方库的源码,其实我们可以通过docker来将celery服务封装成镜像,如此一来,以后再使用celery或者别的系统依赖celery,我们只需要将该镜像以容器的形式跑服务即可,不需要繁琐的配置与安装。
首先新建celery_with_docker文件夹,cdcelery_with_docker
建立dockerfile文件
意思是基础镜像我们使用python,然后安装celery
然后新建docker-compose.yml
这个配置文件的作用是,单独拉取rabbitmq镜像,启动rabbitmq服务,用户名和密码为:liuyue:liuyue然后在镜像内新建一个celery工程,目录放在/deploy/app,随后通过挂载文件夹的方式将宿主的app目录映射到/deploy/app,最后启动celery服务
最后,我们只需要在宿主机建立一个app文件夹,新建一些任务脚本即可
新建tasks.py
新建任务调用文件test.py
最后项目的目录结构是这样的
随后在项目根目录执行命令:docker-compose up --force-recreate
此时celery和rabbitmq服务已经启动
进入浏览器http://localhost:15672用账号登录 liuyue:liuyue
没有问题,此时我们进入容器内部
可以看到,容器内已经通过挂载将宿主机的app文件夹共享了进来
随后我们执行异步任务:python3 test.py
可以看到执行成功了
由此可知,在宿主机,什么环境都不需要配置,只需要安装一个docker即可,异步任务队列的搭建和执行全部在docker的内部容器内,完全隔绝,只是具体的代码和脚本通过docker的挂载命令来在宿主机编写,也就是研发人员只需要在宿主机专注编写代码,而不需要管配置和部署的问题。
最后,附上项目的完整代码:https://gitee.com/QiHanXiBei/celery-with-docker-composer