消息列队 分布式事务解办法 celery flower使用总结
2017-10-24 18:07 freefei 阅读(4566) 评论(1) 编辑 收藏 举报前言
项目中有场景 需要用到 分布式事务业务,经过查下资料把学习相关笔记做记录方便他人或者自己后面查看。
- 场景
在网站A业务中有个操作 是 要在网站B中新建一台服务器跑业务。A中执行B中的接口创建服务器 中间需要的时间很长。A如果一直等着B放回结果会超时。B 执行命令 很耗资源,而且不能执行太多的并发。 这这种需求下 我们想到的就是 传说中的
“消息列队“
来解决这种分布式事务。
- 解决办法
我们在A中 创建 消息列队机制。 当有新建机器任务时 在列队中新增加任务 任务执行完成后回掉相关接口通知A 你的任务已完成,同时在列队任务结果中删除结果(任务完成后有专门的表来存放完成的任务),
软件
-
redes / rabbitmq 列队数据库 我用redis
-
celery 开源列队任务工具 写任务用(添加任务 / 执行任务)全靠他
-
flower 列队工具celery 的web版监控工具 方便查看
我的流程 (我用docker 我们在rancher编排工具)
由于我们用的是docker容器所以免去了中间的相关软件安装编译 只需要下载镜像即可
-
hub.03in.com:5002/ranmufei/docker-celery-flower 这是我们自己的镜像 这中间集成了 我们的工具 celery , flower
-
hub.03in.com:5002/dev/redis redis数据库 存放列队任务 和 任务执行结果的数据库
rancher 编排
redis:
tty: true
image: hub.03in.com:5002/dev/redis
stdin_open: true
celery-flower:
ports:
- 5555:5555/tcp
environment:
CELERY_BROKER_URL: redis://redis:6379/1
labels:
broker_api: http://rabbit:15672/api/
tty: true
image: hub.03in.com:5002/ranmufei/docker-celery-flower
volumes:
- /home/soft/celery:/celery
stdin_open: true
给容器挂载 /home/soft/celery:/celery 这个目录是用来存放python写的任务的目录
代码 (/celery/tasks.py)
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
from celery import Celery
from time import sleep
# broker="redis://redis:6379/1" 列队数据库存放点
# backend="redis://redis:6379/2" 任务执行完成后数据库存放点
app=Celery("tasks",broker="redis://redis:6379/1",backend="redis://redis:6379/2")
@app.task
def add(x,y):
return x + y
@app.task
def jj(x,y):
sleep(30)
return x - y
@app.task
def ranmufei(name):
return name
进入celery-flower 创建的容器 首先给编写的任务创建 一个执行worker
# 进入到 存放python的写的celery任务的目录 执行如下 启动worker;
# 在tasks.py 所在的目录下才能执行下面代码 切记
celery -A tasks worker --loglevel=info
另外提醒 如果在生成环境中量大 情况下 还可以启动多个worker 在容器中是否可以考虑分布是部署 一个容器只跑一个worker 有待研究 。。。。 暂时没深究 奉上参考资料 https://my.oschina.net/siddontang/blog/284107
测试发布任务
curl -X POST -d '{"args":[131,15]}' http://localhost:5555/api/task/send-task/tasks.add
如果没问题 可以在 flower 提供的web 界面中看到 这个任务的执行情况,不怕麻烦也可以直接去 redis 中看看
参考资料
作者:鹊桥仙
出处:http://www.cnblogs.com/freefei/
关于作者:专注于Linux平台项目架构、管理和企业解决方案。基于linux 容器技术 微服务架构 云计算领域有一点点经验。如有问题或建议,请多多赐教!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题,可以邮件:ranmufei@qq.com 微博:鹊桥仙 联系我,非常感谢。
</p>
</div>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架