使用Docker-compose来封装celery4.1+rabbitmq3.7服务,实现微服务架构
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_115
大家都知道,Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,在之前的一篇文章中:python3.7+Tornado5.1.1+Celery3.1+Rabbitmq3.7.16实现异步队列任务详细阐述了如何进行安装部署和使用,但是过程太繁琐了,先得安装Erlang,再安装rabbitmq,然后各种配置,最后由于async关键字问题还得去修改三方库的源码,其实我们可以通过docker来将celery服务封装成镜像,如此一来,以后再使用celery或者别的系统依赖celery,我们只需要将该镜像以容器的形式跑服务即可,不需要繁琐的配置与安装。
首先新建celery_with_docker文件夹,cdcelery_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
原文转载自「刘悦的技术博客」 https://v3u.cn/a_id_115
使用Docker-compose来封装celery4.1+rabbitmq3.7服务,实现微服务架构的更多相关文章
- 基于Docker Compose的.NET Core微服务持续发布
是不是现在每个团队都需要上K8s才够潮流,不用K8s是不是就落伍了.今天,我就通过这篇文章来回答一下. 一.先给出我的看法和建议 我想说的是,对于很多的微小团队来说,可能都不是一定要上K8s,毕竟上K ...
- .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行
本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...
- Docker(四):Docker 三剑客之 Docker Compose
前两篇文章我们介绍了 Dockerfile 的使用Docker(二):Dockerfile 使用介绍,我们知道使用一个 Dockerfile 模板文件可以定义一个单独的应用容器,如果需要定义多个容器就 ...
- Docker 核心技术之Docker Compose
Docker Compose 简介 Docker Compose是什么? Docker Compose是一个能一次性定义和管理多个Docker容器的工具. 详细地说: Compose中定义和启动的每一 ...
- Docker学习笔记之常用的 Docker Compose 配置项
0x00 概述 与 Dockerfile 一样,编写 Docker Compose 的配置文件是掌握和使用好 Docker Compose 的前提.编写 Docker Compose 配置文件,其本质 ...
- Docker小白到实战之Docker Compose在手,一键足矣
前言 Docker可以将应用程序及环境很方便的以容器的形式启动,但当应用程序依赖的服务比较多,或是遇到一个大系统拆分的服务很多时,如果还一个一个的根据镜像启动容器,那就有点累人了,到这有很多小伙伴会说 ...
- 基于 Docker 的微服务架构实践
本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ...
- 【原创】Docker容器及Spring Boot微服务应用
Docker容器及Spring Boot微服务应用 1 什么是Docker 1.1 Docker的出现 问题一:项目实施环境复杂问题 传统项目实施过程中经常会出现“程序在我这跑得好好的,在你那怎么就不 ...
- 使用 Spring Cloud 和 Docker 构建微服务架构
如何使用Spring Boot.Spring Cloud.Docker和Netflix的一些开源工具来构建一个微服务架构. 本文通过使用Spring Boot.Spring Cloud和Docker构 ...
随机推荐
- 多线程07:async、future、packaged_task、promise
async.future.packaged_task.promise 本节内容需要包含头文件:#include <future> 一.std::async. std::future 创建后 ...
- 11┃音视频直播系统之 WebRTC 进行文本聊天并实时传输文件
一.RTCDataChannel WebRTC 不但可以让你进行音视频通话,而且还可以用它传输普通的二进制数据,比如说可以利用它实现文本聊天.文件的传输等 WebRTC 的数据通道(RTCDataCh ...
- 134_Power BI Report Server之某消费品运营数据监控
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一背景 最近很久都没有更新文章了,研究了下Power BI Report Server(下文简称pbirs). 今天把pb ...
- python操作MySQL与MySQL补充
目录 python操作MySQL 基本使用 SQL注入问题 二次确认 视图 触发器 事务 存储过程 函数 流程控制 索引 练习 python操作MySQL python中支持操作MySQL的模块很多, ...
- 【SpringCloud原理】万字剖析OpenFeign之FeignClient动态代理生成源码
年前的时候我发布两篇关于nacos源码的文章,一篇是聊一聊nacos是如何进行服务注册的,另一篇是一文带你看懂nacos是如何整合springcloud -- 注册中心篇.今天就继续接着剖析Sprin ...
- 分布式机器学习:逻辑回归的并行化实现(PySpark)
1. 梯度计算式导出 我们在博客<统计学习:逻辑回归与交叉熵损失(Pytorch实现)>中提到,设\(w\)为权值(最后一维为偏置),样本总数为\(N\),\(\{(x_i, y_i)\} ...
- React BrowserHistory 踩坑实录 布置到服务器Nginx上各种静态文件、二级地址404
由于BrowserHistory访问的是文件真实地址不仅需要前端配置package.json还需要运维端配置一下网站Nginx设置环境: "react": "^17.0. ...
- 浏览器代理user-agent
两种方法: 法1:浏览器地址栏输入:about://version,然后复制用户代理: 如果法1不行,法2肯定可以. 法2:打开任意浏览器,输入任意网址,下面以火狐和百度网址为例来进行说明: 打开火狐 ...
- JAVA学习之第一个HelloWorld程序
第一个HelloWorld程序 第一步,创建java类型的文件 第二步,在创建文件的目录中打开cmd窗口 第三步,使用javac 命令将java文件编译为.class类型的字节码文件 第四步,使用ja ...
- Redis配置文件所在位置
更新记录 2022年6月13日 发布. Windows系统 Redis 配置文件位于 Redis 安装目录下文件名为 redis.conf 注意:Windows系统下名为 redis.windows. ...