【实测】django的超轻量级消息队列:django-task-mq 使用教程

简介: 【实测】django的超轻量级消息队列:django-task-mq 使用教程

最近在培训压测平台中,因为需要使用到消息队列,考虑到很多同学的电脑windows不支持很多开源消息队列的原因,加上复杂繁重的那些中间件大家部署安装总是出错。所以自研了一个超轻量级的小工具:django-task-mq

   

效果(在压测平台中效果):(开了俩个消费者进程)

640.png


   控制台输出: (为了方便理解,故意添加了no task... )

640.png


然后说说它目前的功能和未来要做的扩展:

具备broker中心,消费者端,生产者端,topic,优先级,分布式都有。


【原理】:原理很简单,借助django的orm技术,在数据库中新建持久消息表,结合算法成为先进先出的栈。


【优点】:理解和使用简单,不需要复杂的安装和各种依赖,支持各种系统,轻量级,适用于中小型消息队列需求。


【使用流程】:


(一:初始化)


首先要下载:pip3 install django-task-mq

然后先打开你的django项目目录,找到你的app目录,在app目录内,新建一个任意名称的.py文件。


然后在这个文件内直接粘贴复制下面代码,之后独立用python3来运行该文件


import os
from django_task_mq import mq_init
mq_init(os.path.dirname(os.path.abspath(__file__)))

这步的目的是初始化消息内容表,它会自动重写你的models.py和admin.py。

然后你要手动的去控制台执行数据库同步的俩个命令:


python3 manage.py makemigrations

python3 manage.py migrate


到此,表就弄好了,你可以在admin后台看到了。

注意,此初始化函数只能执行一次,所以之后请清空文件内容,你不删除这句它就会提醒你重复执行,虽然也没啥报错等后果。


(二:设置生产者)

在你想要新建生产者的函数内,导入并调用mq_producer函数即可。具体可以参考示例:

from django_task_mq import mq_producer
mq_producer(DB_django_task_mq,topic='',message={})


注意,第一个DB_django_task_mq为上一步中自动创建的消息表本体,你需要自行导入,如from MyApp.models import * 。不过,在一般django的views.py中,你肯定早就一开始就导入了所有表了...


topic为管道/标识符/过滤符/分类名 等等意思。

message为字典类型的数据存储,你可以任意往里面写内容。

之后,当这个函数被调用,就会在消息表中新增一条消息记录。


(三:新增消费者)


消费者本质上是一个进程,这个进程是在执行一个文件,这个文件在监控数据库消息表,并且按照先进先出规定来消费消息。


还是在一开始新建的这个文件,导入并调用 mq_consumer 函数。


import os,sys,django
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '%s.settings'%'') # 引号中请输入您的setting父级目录名
django.setup()
from MyApp.models import DB_django_task_mq
from django_task_mq import mq_consumer
from MyApp.views import play
mq_consumer(DB_django_task_mq,play,topic='yace')


注意,第三行里,你需要手动写上你的settings.py的父级文件夹名字。为什么我不自动给你计算呢?因为很多同学名字叫的五花八门,写个复杂算法来排查出来不值当,还是直接手写后程序执行速度才快。


然后里面的MyApp要改成你自己项目的app文件夹名字。


里面的play函数为你读取了消息后要执行的业务函数。所以替换成你的函数名字就可以,我的函数做的事就是去压测这个message里面的内容。


注意这个play函数有且只能接收message一个参数。所以你最好在一开始就给message这个字典塞满你要的一切内容。


topic 是你要读取的标识符,对不上topic的消息则不会消费掉。


然后你启动这个消费者的方式有很多:

  1. 在pycharm里右键直接运行这个文件。
  2. 在pycharm里Terminal终端用python3运行这个文件。
  3. 在终端或cmd窗口里用python3来运行这个文件。
  4. 用nohup命令 后台运行这个文件。
  5. 等等...


注意,这个文件是可以多个并行的,你想运行几个就运行几个,多个消费者并不会冲突。

(培训班内会讲解工具源码和开发思路)


就暂时研发到这,工具才诞生,以后会慢慢更新扩展功能。也欢迎大家提供g改进建议。


相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
23天前
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
63 5
|
18天前
|
消息中间件 存储 Kafka
MQ 消息队列核心原理,12 条最全面总结!
本文总结了消息队列的12个核心原理,涵盖消息顺序性、ACK机制、持久化及高可用性等内容。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
1月前
|
消息中间件 安全 Java
云消息队列RabbitMQ实践解决方案评测
一文带你详细了解云消息队列RabbitMQ实践的解决方案优与劣
63 7
|
21天前
|
消息中间件
解决方案 | 云消息队列RabbitMQ实践获奖名单公布!
云消息队列RabbitMQ实践获奖名单公布!
|
29天前
|
消息中间件 存储 弹性计算
云消息队列RabbitMQ实践
云消息队列RabbitMQ实践
|
1月前
|
消息中间件 存储 监控
解决方案 | 云消息队列RabbitMQ实践
在实际业务中,网站因消息堆积和高流量脉冲导致系统故障。为解决这些问题,云消息队列 RabbitMQ 版提供高性能的消息处理和海量消息堆积能力,确保系统在流量高峰时仍能稳定运行。迁移前需进行技术能力和成本效益评估,包括功能、性能、限制值及费用等方面。迁移步骤包括元数据迁移、创建用户、网络打通和数据迁移。
63 4
|
2月前
|
消息中间件 运维 监控
云消息队列RabbitMQ实践解决方案评测报告
本报告旨在对《云消息队列RabbitMQ实践》解决方案进行综合评测。通过对该方案的原理理解、部署体验、设计验证以及实际应用价值等方面进行全面分析,为用户提供详尽的反馈与建议。
80 16
|
2月前
|
消息中间件 弹性计算 运维
阿里云云消息队列RabbitMQ实践解决方案评测报告
阿里云云消息队列RabbitMQ实践解决方案评测报告
73 9
|
2月前
|
消息中间件 监控 数据处理
解决方案 | 云消息队列RabbitMQ实践
解决方案 | 云消息队列RabbitMQ实践
50 1
|
2月前
|
消息中间件 弹性计算 运维
云消息队列RabbitMQ实践
本评测报告详细分析了阿里云云消息队列 RabbitMQ 版的实践原理、部署体验及核心优势。报告认为其在解决消息积压、脑裂难题及弹性伸缩方面表现优秀,但建议进一步细化架构优化策略和技术细节描述。部署文档详尽,对初学者友好,但仍需加强网络配置和版本兼容性说明。实际部署展示了其高可用性和成本优化能力,适用于高并发消息处理和分布式系统数据同步。为进一步提升方案,建议增加安全性配置指导、性能调优建议及监控告警系统设置。

相关产品

  • 云消息队列 MQ