消息推送和短信发送的实现方案

飞书消息推送替代短信验证码的技术方案 身份验证是现代应用的基础安全机制,其中短信验证码是最常见的实现方式。其工作原理是通过运营商网络向用户手机发送包含随机数字的短信,用户需回填完成验证。传统短信验证存在成本高、延迟大、到达率不稳定等痛点。通过企业级协同平台的消息推送服务(如飞书开放平台API)实现验证码下发,能显著提升系统可靠性和用户体验。这种技术方案特别适合已有IM生态的企业,利用消息推送的高到达率(实测99.9%)和即时性(<1秒延迟),结合Redis实现验证码管理,可零成本替代付费短信服务。在电商、金融等需要高频验证的场景中,该方案能实现 阅读详情

本文主要是将目前的消息模块做一个总结,分为短信发送、APP的消息推送两个部分。短信发送采用的是第三方的API(阿里大于短信平台),APP的消息推送采用的是极光的消息推送平台。只是介绍一个大概的流程,细节方面相对少一些。

 
13087175-d5250e8b24a3cc8f.png
消息发送流程.png
  1. 有消息发送需求后,直接实例化msg或者sms,通过调用封装好的方法分别放到appMsgQueue和smsQueue。
    //消息推送
    @Autowired
    @Qualifier("appMsgProcesser")
    private MessageProcesser appMsgProcesser;
    AppMsgMessage appMsgMessage = new AppMsgMessage(user, replaceMap, template);
    appMsgProcesser.gather(appMsgMessage);
    //短信
    @Autowired
    @Qualifier("smsProcesser")
    private MessageProcesser smsProcesser; 
    SmsMessage smsMessage = new SmsMessage(moile, replaceStrs, template);
    smsProcesser.gather(smsMessage);
    //gather方法:
    //appMsg
    int result = Integer.parseInt(RedisUtils.lpush(MessageDefine.APPMSQUEUE, JSON.toJSONString(msgMessage)) + "");
    //sms
    int result = Integer.parseInt(RedisUtils.lpush(MessageDefine.SMSQUEUE, JSON.toJSONString(smsMessage)) + "");
  1. MsgHandler类,起一个线程随着系统启动而启动,sleep x秒,也就是每间隔x秒去检查队列中是否有数据,如果有将数据取出反序列化为信息实体,调用工具类中的send方法进行发送。
try {
        // 检测副消息队列,是否有未发送的信息
        Long num = RedisUtils.llen(MessageDefine.SMSQUENES);
        SmsMessage smsMessage;
        if (num > 0) {
            String valueTemp;
            for (int i = 0; i < num; i++) {
                valueTemp = RedisUtils.rpop(MessageDefine.SMSQUENES);
                if (StringUtils.isNotBlank(valueTemp)) {
                    // 反序列化成消息对象
                    smsMessage = JSON.parseObject(valueTemp, SmsMessage.class);
                    try {
                        smsProcesser.send(smsMessage);
                    } catch (Exception e) {
                        e.printStackTrace();
                        continue;
                    }
                }
            }
        } else {// 尝试从主消息队列,获取消息进行发送
            String value = RedisUtils.brpoplpush(MessageDefine.SMSQUENEM, MessageDefine.SMSQUENES, timeout);
            if (StringUtils.isNotBlank(value)) {
                // 反序列化成消息对象
                smsMessage = JSON.parseObject(value, SmsMessage.class);
                boolean result = smsProcesser.send(smsMessage);
                // 发送消息成功 从副队列删除数据
                if (result) {
                    RedisUtils.lrem(MessageDefine.SMSQUENES, -1, value);
                }
            }
            }
        } catch (Exception e) {
        e.printStackTrace();
    }

3.通过util中的方法,调用第三方API进行消息的推送和短信的发送。当然还要保存到本地发送记录等等。


这里采用启单独线程和Redis队列的方式来进行信息的发送,主要是为了避免大量的任务并发进来引起系统的崩溃,采用redis队列的方式可以一定程度上避免阻塞,线程池可创建多个线程来执行任务。

系统集成短信发送业务--AliyunSMS 阿里云短信服务(Alibaba Cloud SMS)是阿里云提供的一项通信服务,允许企业用户或个人通过API/SDK或控制台调用短信发送能力,向国内或境外手机号码发送指定信息。这项服务支持发送验证码、通知短信、推广短信以及多媒体短信等不同类型的短信,确保提供安全可靠的通信体验。 阅读详情

相关推荐

Java实现手机短信发送功能完整指南

在现代互联网应用中,短信作为用户身份验证、通知提醒和营销推广的重要手段,已成为企业级系统不可或缺的功能模块。Java 作为企业开发的主流语言,凭借其稳定性与扩展性,广泛应用于短信发送功能的实现。本章将介绍 Java 短信发送的技术演进路径,涵盖从传统 AT 命令串口通信到现代基于 HTTP/HTTPS 的 RESTful API 调用方式,并对比不同实现方案的适用场景。通过理解 Java 在短信通信中的角色定位,为后续深入掌握 SMS Gateway 集成与服务商接入打下坚实基础。条件应对措施。

weixin_29476595的博客 1592

APP通知栏、微信、短信、邮箱、钉钉消息推送:多渠道消息触达平台

多渠道消息触达平台是一个为应用开发者提供服务的平台,旨在解决发送消息的需求。通过与消息触达平台的接口对接,开发者无需自行编写发送消息的代码,从而实现业务逻辑代码和发送消息逻辑代码的解耦。能够让开发者能够更加专注于核心业务开发,提高开发效率,并且实现了消息发送的统一管理和多渠道的灵活选择。

weixin_52097397的博客 1万+

MATLAB实现邮件与短信自动发送系统开发实战

在现代数据驱动的应用场景中,自动化通知系统已成为不可或缺的一环。MATLAB作为强大的科学计算与工程仿真平台,其功能早已超越传统数值计算范畴,逐步向系统集成与实时通信方向拓展。本章将深入剖析MATLAB如何实现对外部通信渠道的控制,重点聚焦于电子邮件与手机短信的消息发送机制。我们将从MATLAB内置通信能力的发展历程出发,解析其底层依赖的网络协议栈模型,并介绍消息传输过程中涉及的核心组件,如邮件客户端模拟器、HTTP请求引擎以及外部API调用接口。

weixin_42506884的博客 1296

移动App的推送技术

前面的文章中介绍了通用的推送架构和技术,主要介绍了Web端,也讲了部分移动端App。这次则主要介绍移动端的技术原理,实现方法和编程实现。 一、技术原理 一旦服务器数据有更新或者服务器要下发通知给客户端只能等客户端连接的时候才能实现。这种方式使消息失去了实时性。 定义:推送功能最早是被用于Email中,用来提示我们新的信息。在移动互联网普及之后,手机终端成为了消息推送的主战场,例如生活服务类的...

answer3lin的博客 1万+

GIS小白也能看懂的实战:5步教你将ArcGIS里的等高线和水系完美导入CAD做规划图

本文详细介绍了如何将ArcGIS中的等高线和水系数据高效导入CAD,制作专业规划底图的5个关键步骤。从数据准备、ArcGIS处理到CAD优化,涵盖坐标系设置、数据裁剪、格式转换等实用技巧,特别适合设计规划领域的新手快速掌握GIS与CAD协同工作流程。

weixin_27966471的博客 426

网格自适应_Comsol案例解析17:自适应网格的使用

本期导读自适应网格细化有许多优势,比如可以不用对网格进行全局加密,增加计算精度,又会降低求解自由度。本期仍然以气泡上升案例为例,在两相流模块中使用自适应网格。【打开案例模型】【修改网格】适当让气泡边界加密,注意,曲率因子越小,曲线上的网格越密【添加自适应网格】使用默认的参数即可,这里的误差指示器用的是水平集phi。可以根据具体求解模型选择适当的自变量作为误差指示器。【口诀】默认的一般是最...

weixin_28726871的博客 5681

3个步骤轻松集成Push Kit,实现App消息推送

推送通知作为App重要的消息传递工具,广泛应用于电子商务、社交媒体、旅游交通等领域的通知场景。比如当应用有新功能或安全补丁时,系统将推送消息提醒用户及时更新;如果是航班出行类的应用,会发送最新的班次时间表给用户,以确保及时提醒。推送通知是App与用户建立联系,保持信任和满意度的重要方式,那么App怎样才能实现发送通知消息给用户呢?(Push Kit)是华为提供的消息推送平台,建立了从云端到终端的消息推送通道,通过集成推送服务,HarmonyOS应用就可以实现向用户实时推送通知消息。

HarmonyOS SDK闭源开放能力技术团队 2214

通达信波段交易公式实战:如何用副图指标精准捕捉买卖点(附完整源码)

本文深入解析通达信波段交易副图指标的构建与应用,提供完整源码实现,帮助投资者精准捕捉买卖点。通过趋势强度度量、超买超卖判断及信号过滤机制,结合K线图分析,有效提升波段交易的成功率。

weixin_29306317的博客 606

uni-app 开发App时调用uni-push 实现在线系统消息推送通知 保姆教程

在自己的一个工具型的小app上全流程接入了uni-push2.0的推送能力,做个记录,以防后期需要用到。我这里是自己的工具demo App也是相当于学习用,所以就试用的免费版,学习、测试推荐先用一个月的免费试用,大佬随意!点击 新建服务空间 创建新的云服务空间。按需选择需要的云服务商和配置,最后点击购买后创建,创建成功后返回列表就能看到如上图创建的空间。将开发好的云函数右击,上传部署,在进到云空间的管理端 ,选择刚刚上传的云函数。选择一个需要绑定的云服务空间,如果没有,会有一个去开通的按钮,点击去开通。

m0_68964998的博客 1万+

OPTI Toolbox v2.28 安装与 3 个求解器补全:SCIP、SeDuMi、MOSEK 配置详解

本文详细介绍了OPTI Toolbox v2.28在MATLAB环境下的完整安装指南,包括SCIP、SeDuMi和MOSEK三个关键求解器的配置与优化技巧。通过分步指导和实战案例,帮助用户高效搭建强大的优化工具包,提升混合整数规划、二次约束二次规划等复杂问题的求解效率。

weixin_29039773的博客 350

GEOPHYSICS 投稿避坑指南:从格式规范到双盲评审的实战解析

本文详细解析了GEOPHYSICS期刊投稿的全流程避坑指南,从格式规范、数据声明到双盲评审的实战策略。特别强调了数学公式排版、图表制作标准以及投稿系统的隐藏关卡,帮助作者避免常见错误,提升投稿成功率。

weixin_30606461的博客 236

入门级短信推送,你还不会吗?

短信推送服务是生活中常见的,包括一些企业的营销或验证码场景的服务,这些都是需要短信服务来进行的 在开发中也比较常见,如开发一个个人博客系统,就会给注册或登录界面加上填写手机号发送验证码功能,或者加上发送邮件等功能。 目前,支持个人短信服务的厂商:阿里云、腾讯云,其他厂商都是需要认证为企业用户才能使用短信服务平台的 下面就以阿里云短信推送来介绍下常用的场景服务。 首先,开题短信服务平台,https://dysms.console.aliyun.com/overview 短信时需要收费的.

兮动人 2949

STM32Cubemx-H7-17-麦克纳姆轮驱动

我们先看.h,知道哪些函数会有哪些功能和宏定义参数首先 是在.h的宏定义处定义引脚编号,比如tb6612控制方向的引脚,以及设定了哪个定时器作为pwm输出,还有编码计次的中断引脚/* 硬件相关宏定义 *//*1 前进方向往上 42 3*/// TB6612 方向引脚定义/* 定时器相关宏定义 *//* 编码器相关宏定义 */把自己的引脚根据原理图填对应,方向引脚也是,如果发现反转就把对应的引脚定义反过来,编码也是,编码我们用一个引脚就好,都在cubemx配置好。

m0_74211379的博客 1423

手机token记录、支付宝、个推、goeasy、手机前端框架、阿里大于、百度编辑器、秀米集成解决方案

goeasy:web页面推送解决方案      包名:goeasy   jar:goeasy-sdk-0.3.5.jar        gson-2.3.1.jar        slf4j-api-1.7.2.jar 个推:app通知栏等推送解决方案     包名:com.getui.java        TestDemo.test   jar:

爪爪小白 1424

YOLO26涨点改进 | 小目标损失函数独家改进篇 | TGRS 2025 | 引入AdaFocalLoss损失函数,改进小目标检测,自适应聚焦小目标与样本分布不平衡,提升检测精度与训练稳定性

目录一、前言:YOLO26原生损失函数在小目标检测中的核心痛点(涨点瓶颈)1.1 小目标权重不足,聚焦能力薄弱1.2 样本分布不平衡适配性差,正负样本权重失衡1.3 训练不稳定,易出现梯度消失/震荡1.4 未区分小目标与背景的冗余干扰,误检率高二、TGRS 2025顶刊灵感解析:自适应聚焦损失的核心逻辑三、全网独家创新:AdaFocalLoss损失函数设计与YOLO26适配(核心重点,可复现)3.1 AdaFocalLoss函数整体设计(独家设计,清晰可复现)3.2 各核心模块详细设计(独家创新,可直接复现

qq_36130719的博客 203

【OpenClaw从入门到精通】第20篇:OpenClaw实战—从零搭建教育自动化助教系统(作业批改+智能答疑+学情分析)【2026实测】

本文基于OpenClaw开源框架,聚焦教育行业“答疑重复、批改耗时、学情模糊”三大核心痛点,提供从环境部署到功能落地的全流程实操方案。通过整合QQ群交互、代码分析、数据可视化等技能,构建“智能答疑+作业批改+学情分析”的自动化助教系统。系统支持7×24小时群聊答疑、多语言作业自动评审、学情数据周报生成,经实测可使助教工作时间减少60%、作业批改效率提升5-10倍、学情问题识别提前5周。文中包含完整配置步骤、可直接运行的代码示例及避坑指南,兼顾新手入门与进阶实操,帮助教育工作者快速落地自动化工具,从重复劳动中

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1450

批量发送短信接口集成方案,高效群发短信发送功能

本文详细解析了批量发短信接口的集成方案,涵盖核心场景、底层原理、实战代码和优化技巧。重点介绍了接口的通信机制、必填参数、多语言实现示例,并对比了模板变量和完整内容两种发送方式的优劣。针对开发者常见痛点,提供了分批发送、异步调用等优化策略,帮助提升短信发送效率和稳定性。文章还强调了日志监控的重要性,为开发者提供了一套完整的批量短信发送解决方案,适用于验证码、业务通知和运营营销等多种场景。

colicode的博客 736

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

在技术上如何实现发送一条短信?

austin项目实现的第一个渠道::从发送短信开始 01、短信介绍 在项目介绍的时候,已经定义了austin项目的核心功能:发送消息 我认为,短信是在一整个消息推送平台里最重要的一个消息类型了(毕竟关联了很多重要的业务场景),想想我们日常使用APP时的场景: 验证码:登录注册、支付等等重要场景 通知类:用户订单信息、重要信息通知用户、重要信息通知商家等等场景 营销类:运营在特定时间内发送营销短信,影响业务的KPI指标完成(不过这个相对就没那么重要) … (试想下,如果系统挂了10分钟,会怎么样) 发送

m0_68064743的博客 635

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

PUSH消息推送的实现原理

通过短信发送推送消息,并在客户端植入短信拦截模块(主要针对 Android 平台),可以实现对短信进行拦截并提取其中的内容转发给 App 应用处理,这个方案借助于运营商的短消息,能够保证最好的实时性和到达率,但此方案对于成本要求较高,开发者需要为每一条 SMS 支付费用。客户端和服务器定期地建立连接,通过消息队列等方式来查询是否有新的消息,需要控制连接和查询的频率,频率不能过慢或过快,过慢会导致部分消息更新不及时,过快会消耗更多的资源(流量、电量等),对用户体验有较大伤害。

liuqinhou的博客 2674

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WebSocket+RabbitMQ实现消息推送系统

一、用户获取新的消息通知有两种模式 上线登录后向系统主动索取 在线时系统向接收者主动推送新消息 设想下,用户的通知消息和新通知提醒数据都放在数据库中,数据库的读写操作频繁。如果消息量大,DB压力较大,可能出现数据瓶颈。这时候就可以引入消息队列RabbitMQ进行流量削峰。 向指定用户发送WebSocket消息并处理对方不在线的情况 给指定用户发送消息: 如果接收者在线,则直接发送消息; 否则将消息存储到redis,等用户上线后主动拉取未读消息。 ...

何哥的博客 2万+

高并发短信平台实现

01、短信介绍 在项目介绍的时候,已经定义了austin项目的核心功能:发送消息 我认为,短信是在一整个消息推送平台里最重要的一个消息类型了(毕竟关联了很多重要的业务场景),想想我们日常使用APP时的场景: 验证码:登录注册、支付等等重要场景 通知类:用户订单信息、重要信息通知用户、重要信息通知商家等等场景 营销类:运营在特定时间内发送营销短信,影响业务的KPI指标完成(不过这个相对就没那么重要) ... (试想下,如果系统挂了10分钟,会怎么样) 发送短信在消息推送平台里比较容易实现的一

java、c++、机器学习方向King 2648

消息推送

消息推送消息推送(即时通讯) 目的:想办法让服务器能够及时通知客户端 服务器主动发送消息给客户端(建立服务器端和客户端建立长链接) 应用场景:广告、即时通信 实现方案: 1、轮询:客户端每隔一定的时间就向服务器发出请求,获得最新的消息 特点: 1、如果应用在最新新闻通知上,则效率较低 2、技术简单,好实现 应用场景:当服务器端的数据以固定的频率更新时,比如股票信息,黄金,期货类似的信息 2、发

藏经阁→穷则独善其身,达则兼济天下。 2056

架构方案(9) 如何构建一套高可用的 APP 消息推送平台

消息推送作为移动 APP 运营中的一项关键技术,已经被越来越广泛的运用。本文追溯了推送技术的发展历史,剖析了其核心原理,并对推送服务的关键技术进行深入剖析,围绕消息推送时产生的服务不稳定性,消息丢失、延迟,接入复杂性,统计缺失等问题,提供了一整套平台级的高可用消息推送解决方案。实践中,借助于该平台,不仅能提能显著提高消息到达率,还能提高研发效率,并道出了移动开发基础设施的平台化架构思路。 推送基础...

cowbin2012的专栏 1万+

多级缓存实现消息投递(短信发送)

多级缓存实现消息投递(短信发送) 文章背景 接产品需求,要在项目中实现代扣失败后短信的发送,但从这一点来讲比较容易实现,代扣失败直接发短信就是了,但是需求难实现主要是在于场景的复杂性,目前代扣的场景包括,实时代扣、查证、回调三个部分;每天代扣次数不定,目前是两次。 要求 支持当天只能发一条失败短信通知,对于一个客户多个绑定卡的情况,只发送给最优卡绑定的手机; 支持后续开放对多次批扣,多次短信发送的...

java界的小学生 434

这7种实现web实时消息推送的方案,你用过哪几种?

我有一个朋友~做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能。不过他还没想好用什么方式做,这里我帮他整理了一下几种方案,并简单做了实现。什么是消息推送(push)推送的场景比较多,比如有人关注我的公众号,这时我就会收到一条推送消息,以此来吸引我点击打开应用。消息推送(push)通常是指网站的运营工作等人员,通过某种工具对用户当前网页或移动设备AP...

架构师小秘圈 1899
上一篇: Java 8 Stream详解
下一篇: TraceEagle使用教程
小许子是逗星人
博客等级 码龄11年 2粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值