【实测】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版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2月前
|
消息中间件 数据管理 Serverless
阿里云消息队列 Apache RocketMQ 创新论文入选顶会 ACM FSE 2025
阿里云消息团队基于 Apache RocketMQ 构建 Serverless 消息系统,适配多种主流消息协议(如 RabbitMQ、MQTT 和 Kafka),成功解决了传统中间件在可伸缩性、成本及元数据管理等方面的难题,并据此实现 ApsaraMQ 全系列产品 Serverless 化,助力企业提效降本。
|
11月前
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
759 99
|
11月前
|
消息中间件 安全 Java
云消息队列RabbitMQ实践解决方案评测
一文带你详细了解云消息队列RabbitMQ实践的解决方案优与劣
269 107
|
10月前
|
消息中间件 存储 Kafka
MQ 消息队列核心原理,12 条最全面总结!
本文总结了消息队列的12个核心原理,涵盖消息顺序性、ACK机制、持久化及高可用性等内容。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
11月前
|
消息中间件
解决方案 | 云消息队列RabbitMQ实践获奖名单公布!
云消息队列RabbitMQ实践获奖名单公布!
166 1
|
11月前
|
消息中间件 存储 弹性计算
云消息队列RabbitMQ实践
云消息队列RabbitMQ实践
|
11月前
|
消息中间件 存储 监控
解决方案 | 云消息队列RabbitMQ实践
在实际业务中,网站因消息堆积和高流量脉冲导致系统故障。为解决这些问题,云消息队列 RabbitMQ 版提供高性能的消息处理和海量消息堆积能力,确保系统在流量高峰时仍能稳定运行。迁移前需进行技术能力和成本效益评估,包括功能、性能、限制值及费用等方面。迁移步骤包括元数据迁移、创建用户、网络打通和数据迁移。
266 4
|
12月前
|
消息中间件 运维 监控
云消息队列RabbitMQ实践解决方案评测报告
本报告旨在对《云消息队列RabbitMQ实践》解决方案进行综合评测。通过对该方案的原理理解、部署体验、设计验证以及实际应用价值等方面进行全面分析,为用户提供详尽的反馈与建议。
210 16
|
消息中间件 存储 Java
【干货】看看我司消息队列用啥,全网最接地气pulsar教程(含业务解耦demo源码)
本文介绍了Apache Pulsar消息队列系统的核心特性及其与其它消息队列的区别,通过Docker安装Pulsar及Pulsar Manager,并结合电商业务场景,对比了串行执行与使用Pulsar实现异步解耦的优势,最后通过Java代码示例展示了如何利用Pulsar解决实际业务问题。
797 4
【干货】看看我司消息队列用啥,全网最接地气pulsar教程(含业务解耦demo源码)
|
12月前
|
消息中间件 弹性计算 运维
阿里云云消息队列RabbitMQ实践解决方案评测报告
阿里云云消息队列RabbitMQ实践解决方案评测报告
201 9

相关产品

  • 云消息队列 MQ