Dockercompose封装celery4。1rabbitmq3。7服务,实现微服务架构
大家都知道,Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,在之前的一篇文章中:python3.7+Tornado5.1.1+Celery3.1+Rabbitmq3.7.16实现异步队列任务 详细阐述了如何进行安装部署和使用,但是过程太繁琐了,先得安装Erlang,再安装rabbitmq,然后各种配置,最后由于async关键字问题还得去修改三方库的源码,其实我们可以通过docker来将celery服务封装成镜像,如此一来,以后再使用celery或者别的系统依赖celery,我们只需要将该镜像以容器的形式跑服务即可,不需要繁琐的配置与安装。
首先新建celery_with_docker文件夹,cd celery_with_docker
建立dockerfile文件 FROM python LABEL author="liuyue" LABEL purpose = "" RUN apt update RUN pip3 install setuptools ENV PYTHONIOENCODING=utf-8 # Build folder RUN mkdir -p /deploy/app WORKDIR /deploy/app #only copy requirements.txt. othors will be mounted by -v #COPY app/requirements.txt /deploy/app/requirements.txt #RUN pip3 install -r /deploy/app/requirements.txt RUN pip3 install celery # run sh. Start processes in docker-compose.yml #CMD ["/usr/bin/supervisord"] CMD ["/bin/bash"]
意思是基础镜像我们使用python,然后安装celery
然后新建docker-compose.yml # Use postgres/example user/password credentials version: "3.4" services: myrabbit: #restart: always #build: rabbitmq/ image: rabbitmq:3-management # hostname: rabbit-taiga environment: RABBITMQ_ERLANG_COOKIE: SWQOKODSQALRPCLNMEQG # RABBITMQ_DEFAULT_USER: "guest" # RABBITMQ_DEFAULT_PASS: "guest" # RABBITMQ_DEFAULT_VHOST: "/" # RABBITMQ_NODENAME: taiga RABBITMQ_DEFAULT_USER: liuyue RABBITMQ_DEFAULT_PASS: liuyue ports: - "15672:15672" # - "5672:5672" api: #restart: always stdin_open: true tty: true build: ./ image: celery-with-docker-compose:latest volumes: - ./app:/deploy/app ports: - "80:80" command: ["/bin/bash"] celeryworker: image: celery-with-docker-compose:latest volumes: - ./app:/deploy/app command: ["celery", "-A", "tasks", "worker", "-c", "4", "--loglevel", "info"] depends_on: - myrabbit
这个配置文件的作用是,单独拉取rabbitmq镜像,启动rabbitmq服务,用户名和密码为:liuyue:liuyue然后在镜像内新建一个celery工程,目录放在/deploy/app,随后通过挂载文件夹的方式将宿主的app目录映射到/deploy/app,最后启动celery服务
最后,我们只需要在宿主机建立一个app文件夹,新建一些任务脚本即可
新建tasks.py from celery import Celery SERVICE_NAME = "myrabbit" app = Celery(backend = "rpc://", broker = "amqp://liuyue:liuyue@{0}:5672/".format(SERVICE_NAME)) @app.task def add(x, y): print(123123) return x + y
新建任务调用文件test.py
import time from tasks import add # celery -A tasks worker -c 4 --loglevel=info t1 = time.time() result = add.delay(1, 2) print(result.get()) print(time.time() - t1)
最后项目的目录结构是这样的
随后在项目根目录执行命令:docker-compose up --force-recreate
此时celery和rabbitmq服务已经启动
进入浏览器 http://localhost:15672 用账号登录 liuyue:liuyue
没有问题,此时我们进入容器内部 docker exec -i -t celery-with-docker-compose-master_api_1 /bin/bash
可以看到,容器内已经通过挂载将宿主机的app文件夹共享了进来
随后我们执行异步任务:python3 test.py
可以看到执行成功了
由此可知,在宿主机,什么环境都不需要配置,只需要安装一个docker即可,异步任务队列的搭建和执行全部在docker的内部容器内,完全隔绝,只是具体的代码和脚本通过docker的挂载命令来在宿主机编写,也就是研发人员只需要在宿主机专注编写代码,而不需要管配置和部署的问题。
最后,附上项目的完整代码:https://gitee.com/QiHanXiBei/celery-with-docker-composer
雷朋智能眼镜终于变得有点智能Facebook让它的智能眼镜终于做了一些聪明的事情。首席执行官马克扎克伯格(MarkZuckerberg)周三在Facebook上发帖称,去年首次亮相的RayBanStories
准绝杀!六分钟连砍15分!他们两个拯救了中国队亚洲杯首战输给韩国,一大批球员生病发烧,此刻的中国男篮,已经到了最困难的时刻。尽管周琦紧急与球队会合,但还没痊愈的他并没有出战昨晚与巴林的比赛。一方面是为了他的身体考虑,一方面也是
雷朋智能眼镜终于变得有点智能Facebook让它的智能眼镜终于做了一些聪明的事情。首席执行官马克扎克伯格(MarkZuckerberg)周三在Facebook上发帖称,去年首次亮相的RayBanStories
准绝杀!六分钟连砍15分!他们两个拯救了中国队亚洲杯首战输给韩国,一大批球员生病发烧,此刻的中国男篮,已经到了最困难的时刻。尽管周琦紧急与球队会合,但还没痊愈的他并没有出战昨晚与巴林的比赛。一方面是为了他的身体考虑,一方面也是
sanag塞那X6S渐色音箱和王心凌,您心目中的女神夏至已至,这个夏天注定不一样的。2022年7月13日,在湖南卫视OMG玩美咖的节目上,王心凌向大家隆重推介sanag塞那X6S渐变色蓝牙音箱。sanag塞那X6S渐变色蓝牙音箱的出
人品越差的人,越喜欢把这3句话挂在嘴边,最好别深交一个人的修养,体现在行动里一个人的人品,体现在言语里。其实了解一个人,从生活中的点点滴滴,我们就能明白所有。有些人说话及其负责,不会信口开河有些人说话没有根据,总是随便胡诌。信错了
在中缅边境,经常有缅甸女孩偷偷跨墙来中国,从事的行业令人心疼不知道你去缅甸旅游,有没有发现一个现象,一些缅甸女孩会在早上的时候偷偷越过边境线到中国来,这到底是为什么呢?(此处已添加小程序,请到今日头条客户端查看)缅甸虽然近些年经济状况有所好
分享一组喜欢的照片哈喽哈喽旅拍菌喊你来看杂志大片啦!张婧仪为杂志LOHAS乐活拍摄的封面大片真的太太太好看了盛夏午后阳光明媚少女在庭院里随风随光而动时而宁静时而充满活力如同夏日一般热情美好夏日氧气大
心脏最喜欢的十大饮食习惯,权威指南告诉您如何吃出健康心脏随着生活水平的提高,大鱼大肉的现象多了起来。生活压力大,胡乱填饱肚子,对我们的身体造成了很多不好的影响。不健康的饮食可以增加心血管疾病的发病率和死亡率,也是引起动脉硬化心绞痛等心脑
sanag塞那X6S渐色音箱和王心凌,您心目中的女神夏至已至,这个夏天注定不一样的。2022年7月13日,在湖南卫视OMG玩美咖的节目上,王心凌向大家隆重推介sanag塞那X6S渐变色蓝牙音箱。sanag塞那X6S渐变色蓝牙音箱的出
人品越差的人,越喜欢把这3句话挂在嘴边,最好别深交一个人的修养,体现在行动里一个人的人品,体现在言语里。其实了解一个人,从生活中的点点滴滴,我们就能明白所有。有些人说话及其负责,不会信口开河有些人说话没有根据,总是随便胡诌。信错了