完整电商项目--(三)验证码操作(3):短信验证码 -- cerely-RabbitMQ实现异步

云原生监控:Prometheus+Grafana监控Nginx实战 在云原生环境中,应用的高可用性和性能优化至关重要。Nginx作为一款广泛使用的高性能Web服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器,对其进行有效的监控能够及时发现潜在问题,保障服务的稳定运行。本文章的目的是详细介绍如何使用Prometheus和Grafana构建一套完整的监控系统来监控Nginx,范围涵盖从环境搭建、数据采集、存储到可视化展示的整个流程。 阅读详情

什么是cerely

什么是RabbitMQ

  • 这个是我们用来作为中间人的工具。
    在这里插入图片描述
坦然讲,目前只能使用这些工具,完成基本的业务需求。暂时没有更深入化的理解。所以介绍和理解过于书面化,少些个人的理解和感悟。 以后会更新,此项目中各个技术点的研究专栏。

使用cerely进行异步,发送短信验证码

  • 我们同样参考官方文档:在Celery和Django中使用
  • (1)安装celery
    在这里插入图片描述
  • (2) 创建Celery实例并加载配置(下面我们直接引入官方文档的例子)
  • 这是一般的目录结构,只要django版本1.8以上都是这样。
    在这里插入图片描述
  • 引入官网例子
from __future__ import absolute_import, unicode_literals

import os

from celery import Celery

# set the default Django settings module for the 'celery' program.
# 为“ celery”程序设置默认的Django设置模块,意思就是读取django的配置文件
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

# 创建celery 对象, ‘proj’可以为任意名称
app = Celery('proj')

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
#在这里使用字符串意味着工作人员不必序列化
#子进程的配置对象。
#-namespace ='CELERY'表示所有与celery相关的配置密钥
#应该带有`CELERY_`前缀。
# 加载celery的配置
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django app configs.
# 从所有已注册的Django应用程序配置中加载任务模块。(就是加载编写的任务,我们是等下编写 发送短信验证码的任务)
app.autodiscover_tasks()


@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

在这里插入图片描述

  • (3) 将改cerely模块,加载到django应用模块
    在这里插入图片描述
如果你读上述中的步骤还不清楚,官网下文立即给出了各个步骤的解释:(真的详细)

在这里插入图片描述

  • 需要注意的地方:
    • 里面类似 :‘proj.settings’ 这样的地方美食需要填写你自己的项目配置文件的位置
    • proj :就是项目的意思。可以填写自己的项目名字
app.config_from_object('django.conf:settings', namespace='CELERY')
  • 这一句代码,实际上下文已经讲解的很清楚了! 意思就是 前面的:(1) ‘django.conf:settings’ 表示在django的配置文件中查找 celery的配置,好处是 不必使用多个配置文件,而直接从Django设置中配置Celery。 (2) namespace=‘CELERY’ 表示的是 ,cerely配置项的标记,cerely寻找自己的配置选项时,便会 以开头为 CELERY_开头的来认定。

  • 补充:(我们当然可以单独命名一个文件路径,以字符串得形式填写进去 路径。不必和django的配置项写在一起)例如:
    在这里插入图片描述
    在这里插入图片描述

  • (4)创建任务:
    可以看到截图的最后面,已经说明了,任务的目录结构,比这创建即可!
    在这里插入图片描述
    我新建了一个文件夹用来专门存放这些。(文章中的任务是放到各个应用下方的)

  • (5)创建任务

  • (6)配置默认就是RebbitMQ当做工人。
    在这里插入图片描述

  • 我们需要指定它的url链接,在刚刚的配置文件当中(config.py)


broker_url= 'amqp://guest:guest@127.0.0.1:5672'
  • 下面就可以开始创建任务了
from celery_tasks.main import app
from meiduo_mall.libs.yuntongxun.sms import CCP
from . import constants

# bind:保证task对象会作为第一个参数自动传入
# name:异步任务别名
# retry_backoff:异常自动重试的时间间隔 第n次(retry_backoff×2^(n-1))s, 每尝试一次的时间间隔。
# max_retries:异常自动重试次数的上限
# retry_backoff=3 任务尝试次数
# 都是关键字参数,可写可不写

@app.task(bind=True, name='send_sms', retry_backoff=3)
def send_sms(self, mobile, sms_code):
    # self 表示任务对象本身,到时候一创建任务就有了
    # 将耗时的代码封装在一个方法中
    # ccp = CCP()
    # ret= ccp.send_template_sms(mobile, [sms_code, constants.SMS_CODE_EXPIRES], 1)
    # ret的返回值 是由云通讯决定的,成功时返回值为1
    # if ret !=0:
    #     raise self.retry(exc=Exception('发送短信失败'), max_retries=3)
    # return ret

    # 这里要注意,当修改代码之后, celery要重启之后才能执行新的代码
    print("@"*50)
    print(sms_code)

def hello():
    print('ok')
因为前面讲过是练习,所以我们注释了这些真的发送短信验证码的代码。
  • 启动
$ celery -A proj worker -l info

对应我的目录结构就是
$ celery -A celery_tasks.main worker -l info
需要注意的是,需要先移动到项目目录下方,因为celery_tasks.main是一个相对的位置

在这里插入图片描述
在这里插入图片描述

下面最后一步,启动完之后,我们只需要将任务添加到:

# 从所有已注册的Django应用程序配置中加载任务模块。(就是加载编写的任务,我们是等下编写 发送短信验证码的任务)
app.autodiscover_tasks()

在这里插入图片描述

如此,当我们启动工人。就可以正常使用异步发送短信验证码了!
  • 测试:
    下面我们进行测试:
    在这里插入图片描述
    点击发送验证码,前端显示进入60秒倒计时:
    在这里插入图片描述
    一切正常!

当然上述都只是入门最基本的操作(阅读官方文档实现简单操作不难)。后续将会深入学习理解这些东西!加油。

over!

自抗扰控制(ADRC)理论与工程实践:8.1 自适应ADRC与参数在线整定 自适应自抗扰控制(AADRC)针对传统固定参数ADRC在动态变化系统中的局限性,提出通过在线调整关键参数(如观测器带宽ω₀、控制器带宽ω_c)以适应对象动态变化。主要方法包括基于稳定性理论的自适应律设计和基于性能指标的优化调节,前者保证闭环稳定但设计复杂,后者通过梯度搜索或模糊规则实现性能优化但缺乏严格稳定性证明。当前挑战在于非线性时变系统的稳定性分析、参数变化速率限制及工程实现的计算负担。AADRC拓展了ADRC在变参数系统(如无人机、软体机器人)中的应用,是迈向自主智能控制的关键技术。 阅读详情

相关推荐

从入门到实战:openEuler 系统管理与运维笔记(持续更新)

本文为openEuler系统管理与运维的实战笔记,从CentOS迁移者视角切入,详细介绍了openEuler的生态兼容性、内核优化及安全特性。内容涵盖系统安装规划、虚拟机部署、基础命令操作、文件系统管理以及用户权限配置等核心运维技能,旨在帮助读者快速上手并掌握这一企业级操作系统的日常管理。

weixin_29207149的博客 221

RabbitMQ在SpingBoot中实现短信服务的异步通信

RabbitMQ在SpringBoot中,在短信验证中实现异步通信

qq_57587177的博客 1280

网络设备调试指南:如何用MDIO Clause22/45协议读写Marvell MV88E6390寄存器

本文深入解析了如何通过MDIO Clause 22/45协议对Marvell MV88E6390交换芯片进行寄存器读写调试。文章详细对比了两种协议的本质区别与适用场景,并重点阐述了MV88E6390的直接与间接寻址策略,提供了实战代码示例与关键调试技巧,帮助网络工程师高效解决配置与通信问题。

tequila的博客 517

【黑马SpringCloud(4)】RabbitMQ异步通信实现

RabbitMQ的简单使用,SpringAMQP对RabbitMQ五种消息模型的实现

weixin_43994244的博客 1052

OrCAD Capture CIS 17.4 原理图绘制

OrCAD Capture CIS 17.4 原理图绘制

qq_38960013的博客 7632

IFIX5.8在Win10系统下的安装避坑指南

本文提供了IFIX5.8在Windows 10系统下的详细安装教程与避坑指南。针对常见的驱动缺失、UAC拦截及兼容性报错等问题,文章从安装前准备、分步安装流程到安装后配置与驱动修复,给出了系统性的解决方案,帮助工控从业者顺利完成部署。

f6g7h8i9j的博客 363

整合RabbitMQ实现消息异步发送

消息队列中间件消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削峰等问题。中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的目的。在分布式的系统中,消息队列也会被用在很多其它的方面,比如:分布式事务的支持,RPC 的调用等等。使用较多的消息队列有 ActiveMQ(安全),RabbitMQ,ZeroMQ,Kafka(大数据),MetaMQ,RocketMQ。

hhkdinkd的博客 3118

闲置服务器之代理服务器篇

这台服务器是在阿里云免费白嫖的,天工开物计划,阿里给的300块无门槛优惠券,买了一台新加坡的境外服务器,288,刚刚抵扣完,因为是境外服务器,能够访问一些国内不能访问的网站,所以本文章仅从技术的角度来搭建代理服务器,使用时,请自觉遵守国家相关规定,如有任何违法行为,与本人无任何关系!!!。本文使用tinyproxy来搭建代理服务器。

m0_50281408的博客 2103

短信发送为什么要用RabbitMQ来异步,用异步线程池不可以吗?

异步线程池和RabbitMQ都是用来实现异步处理的工具,但它们的使用场景和实现方式略有不同。 异步线程池适用于处理较为简单的异步任务,通常是将任务提交给线程池,线程池中的线程执行完任务后将结果返回给应用程序。 ...

m0_51697147的博客 603

Vue - 解决报错 Error: Cannot find module ‘XXX\@vue\cli-service\bin\vue-cli-service.js‘(vue项目编译运行出错,启动失败)

vue报错,Error: Cannot find module ‘@vue\cli-service\bin\vue-cli-service.js‘,vue2项目启动报错,vue3项目运行出错,vue执行npm run serve报错,找不到@vue/cli-service模块,vue项目关于:Error: Cannot find module ‘D:\@vue\cli-service\bin\vue-cli-service.js‘的解决方案,vue项目跑不起来了,Vue项目报错,跑项目报错Cannot fi

🏆 前端领域优质创作者 3113

Unity 工具 之 ZXing QRCode 二维码的生成和识别(可设置生成不同颜色的/带图标的二维码)

Unity 基础 之 ZXing QRCode 二维码的生成和识别(可设置生成不同颜色的/带图标的二维码) 目录 Unity 基础 之 ZXing QRCode 二维码的生成和识别(可设置生成不同颜色的/带图标的二维码) 一、简单介绍 二、实现原理 三、注意实现 四、效果预览 五、ZXing.net ( zxing.unity.dll ) 插件下载 六、实现步骤 七、关键代码 一、简单介绍 Unity 开发中,自己整理的一些游戏开发可能用到的功能,整理归档,方便游...

仙魁XAN 9824

Celery - 一个懂得 异步任务 , 定时任务 , 周期任务 的芹菜

1.什么是Celery?Celery 是芹菜Celery 是基于Python实现的模块, 用于执行异步定时周期任务的其结构的组成是由 1.用户任务 app 2.管道 broker 用于存储任务 官方推荐 redis rabbitMQ / backend 用于存储任务执行结果的 3.员工 worker 2.Celery的简单实例 1 from celery i...

weixin_30755393的博客 320

HQChart实战教程54:Renko砖形K线图实现详解

Renko图(砖形图)起源于日本,只关注价格变动而忽略时间和成交量因素: 2.2 算法说明 初始化:使用第一根K线的收盘价创建第一个砖块 变动检测:计算当前价格与最后一个砖块的差值 砖块生成: 当价格变动≥砖块大小时,生成新砖块 当价格变动不足时,更新当前砖块的高低价 方向判断:根据价格变动方向确定砖块颜色 三、完整实现代码 四、Renko图的高级应用 4.1 动态砖块大小调整 4.2 Renko交易策略 三砖反转策略:趋势跟踪策略:本文详细介绍了Renko图的实现原理和在HQChart中的应

QQ_778132974的博客 871

Celery(一)Celery介绍、安装和基本使用

Celery是什么?celery架构图 celery安装,celery基本使用,celery获取执行结果,执行状态,添加任务,停止worker

呀儿呦的博客 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

java 分布式任务队列_cerely-分布式异步任务队列

Celery是一个强大的 分布式任务队列 的异步处理框架,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务(async task)和定时任务(crontab)。在Celery中几个基本的概念,需要先了解下,不然不知道为什么要安装下面的东西。概念:Broker、Backend。brokerbroker是一个消息传输的中间件或消息队列,可以理解为一个邮...

weixin_39772388的博客 1297

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

服务异步通讯 Rabbit-MQ

MQ 消息中间件的详解。使用工具为RabbitMQ。

xujiangyu1的博客 399

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

RabbitMQ之异步通信(黑马快速入门)

springAmqp

m0_57559751的博客 1183

MQ相关知识点

1.项目中在什么地方是用了MQ 1.使用mq异步发送优惠券 2.使用mq异步发送短信 3.使用mq异步扣减库存 4.使用mq异步审核贷款金额 实现异步的方式: MQ 和多线程 2.为什么需要使用MQ 1.异步处理(MQ和多线程) 2.实现解耦 3.流量削峰 (实现高并发) 3.MQ实现异步和多线程有什么区别? 1.多线程实现异步可能会消耗我们的CPU资源,可能会影响我们业务线程执行会发生CPU竞争问题 2.MQ实现异步完全是解耦的,适合大型互联网项目 3.小的项目使用多线程实现异步

weixin_60272582的博客 1228

python之celery使用详解

现在对其celery常用的对象和方法进行分析。

m0_59485658的博客 1878

RabbitMQ实战——异步处理

rabbitmq一个典型的使用场景就是异步处理 场景说明:用户注册后,向用户发注册邮件和注册短信。 我们在进行以上场景开发时,通常会使用两种方式实现。 串行的方式 在没有mq中间件之前,我们通常使用这种方式实现,实现起来很容易,比如先将用户信息插入数据库,然后发送成功注册的邮件、短信。以上三个任务完成后才会给用户响应,但我们应该都知道,对于邮件、短信,对于系统核心业务来说这都不是必须马上发送的,这样的实现方式无非会增加系统的响应时间,甚至给用户带来不好的体验。可以认为就是一个线程在串行执行三个任务。

qq_41519304的博客 1万+

Python之celery的简介与使用

celery的简介   celery是一个基于分布式消息传输的异步任务队列,它专注于实时处理,同时也支持任务调度。它的执行单元为任务(task),利用多线程,如Eventlet,gevent等,它们能被并发地执行在单个或多个职程服务器(worker servers)上。任务能异步执行(后台运行)或同步执行(等待任务完成)。  在生产系统中...

weixin_34387468的博客 785

Python---分布式任务队列的处理框架Celery(异步处理)

https://blog.youkuaiyun.com/qq_37049050/article/details/82260151 https://www.cnblogs.com/forward-wang/p/5970806.html https://blog.youkuaiyun.com/cuomer/article/details/81214438 https://blog.51cto.com/steed/229...

qq_34802511的博客 366

win10 cerely运行报错

运行环境为win10 运行命令为:celery -A celery_tasks.main worker -l info  报错为ValueError: not enough values to unpack (expected 3, got 0) 解决方法为: pip install eventlet 启动命令改为: celery -A celery_tasks.main worker ...

Canjiuhenqiang的博客 440

celery

前言:在正式学习之前,先简单的对celery做一个介绍! 1.什么是celery   Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,专注于实时处理的异步任务队列,同时也支持任务调度。 2.celery架构   Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result sto...

ddxs64451的博客 224

Django中的Cerely

celery -A app.celery_tasks.celery worker -Q queue --loglevel=info -A参数指定创建的celery对象的位置,该app.celery_tasks.celery指的是app包下面的celery_tasks.py模块的celery实例,注意一定是初始化后的实例,后面加worker表示该实例就是任务执行者; -Q参数指的是该worker接收指定的队列的任务,这是为了当多个队列有不同的任务时可以独立;如果不设会接收所有的队列的任务; -l参数指定wor

学习笔记,不喜勿喷! 333

cerely异步分布式

1、释义:   Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery。 举几个实例场景中可用的例子: 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,你过一段时间只需要拿着这个任务id就可以拿到任务执行结果...

weixin_30387663的博客 281
上一篇: RSS订阅 原创 完整电商项目--(三)验证码操作(2):短信验证码--补充 :单例模式
下一篇: 完整电商项目--(四)用户登录(1):基本业务逻辑
我是py呀
博客等级 码龄8年 205粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值