【实测】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
相关文章
|
2月前
|
消息中间件 C语言 RocketMQ
消息队列 MQ操作报错合集之出现"Connection reset by peer"的错误,该如何处理
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
2月前
|
消息中间件 Java C语言
消息队列 MQ使用问题之在使用C++客户端和GBase的ESQL进行编译时出现core dump,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
21天前
|
消息中间件 存储 Java
【干货】看看我司消息队列用啥,全网最接地气pulsar教程(含业务解耦demo源码)
本文介绍了Apache Pulsar消息队列系统的核心特性及其与其它消息队列的区别,通过Docker安装Pulsar及Pulsar Manager,并结合电商业务场景,对比了串行执行与使用Pulsar实现异步解耦的优势,最后通过Java代码示例展示了如何利用Pulsar解决实际业务问题。
43 2
【干货】看看我司消息队列用啥,全网最接地气pulsar教程(含业务解耦demo源码)
|
4天前
|
消息中间件
手撸MQ消息队列——循环数组
队列是一种常用的数据结构,类似于栈,但采用先进先出(FIFO)的原则。生活中常见的排队场景就是队列的应用实例。在数据结构中,队列通常用数组实现,包括入队(队尾插入元素)和出队(队头移除元素)两种基本操作。本文介绍了如何用数组实现队列,包括定义数组长度、维护队头和队尾下标(front 和 tail),并通过取模运算解决下标越界问题。此外,还讨论了队列的空与满状态判断,以及并发和等待机制的实现。通过示例代码展示了队列的基本操作及优化方法,确保多线程环境下的正确性和高效性。
10 0
手撸MQ消息队列——循环数组
|
21天前
|
前端开发 JavaScript 数据库
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
|
30天前
|
消息中间件 存储 Java
【揭秘】RocketMQ内部运作大揭秘:一探究竟,原来消息队列是这样工作的!
【8月更文挑战第19天】RocketMQ是一款高性能、高可用的消息中间件,在分布式系统中至关重要。它采用发布/订阅模式,支持高吞吐量的消息传递。核心组件包括管理元数据的NameServer、存储消息的Broker以及Producer和Consumer。RocketMQ支持发布/订阅与点对点两种模型,并具备复杂的消息持久化和路由机制。通过Java API示例,可轻松实现消息的发送与接收。RocketMQ凭借其出色的特性和可靠性,成为大型分布式系统首选的消息解决方案。
50 5
|
1月前
|
消息中间件 存储 缓存
一个用过消息队列的人,竟不知为何要用 MQ?
一个用过消息队列的人,竟不知为何要用 MQ?
74 1
|
21天前
|
SQL Shell API
python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
|
21天前
|
Linux Shell 数据库
python Django教程 之 安装、基本命令、视图与网站
python Django教程 之 安装、基本命令、视图与网站
|
2月前
|
消息中间件 Java 物联网
消息队列 MQ操作报错合集之建立连接时发生了超时错误,该如何解决
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
消息队列 MQ操作报错合集之建立连接时发生了超时错误,该如何解决

相关产品

  • 云消息队列 MQ