基于springboot的短信服务的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
无锡职业技术学院学报
JOURNAL OF WUXI INSTITUTE OF TECHNOLOGY
第19卷第2期
Vol. 19 No. 2
2020年3月Mar 2020
DOI :10.13750/j. cnki. issn. 1671-7880. 2020. 02. 009
基于SpringBoot 的短信服务的设计与实现
庄学松a 张智b 黄可望c
(无锡职业技术学院a.物联网技术学院;b.人事处;c.物联网技术学院,江苏 无锡214121)
摘 要:在气象业务中需要实时关注气象设备及业务应用系统的运行状态,采用手机短信报警是 一种常见的通知手段,但是各个单位和部门的短信报警开发和使用没有统一规范。
文章利用Spri
ngBoot 构建微服务框架,并借助阿里云短信服务实现了分布式短信报警服务,将阿里云短信服务
封装后再发布成部门内部可调用的接口,不但节约了资源,还简化了短信发送的开发难度,为可靠
的气象业务系统运行提供了保障。
关键词:阿里云;微服务;监控;报警;短信中图分类号:TP 277
文献标志码:A 文章编号:1671-7880(2020)02-0041-04
A Design and Implementation of SMS Service based on SpringBoot
ZHUANG Xueson g a ZHANGZhi HUANG Kewan g c
(a School of Internet of Things Technology , b DepartmentofHumanResources ,
c SchoolofInternetofThingsTechnology , WuxiInstituteofTechnology , Wuxi214121, China )
Abstract : It is required for a prompt attention to the operation status of meteorological equipment and ap
plication system in meteorological affairs. Using SMS alarm is a common notification method, but there is
nounifiedspecificationforthedevelopmentand utilization of SMS alarms in variousunitsand depart ments Inthisstudy ,SpringBootisusedtobuildamicroserviceframework ,andadistributedSMSalarm serviceisimplementedviaAlibabaCloudSMSservice Encapsulating the Alibaba Cloud SMS service and then publishing it as an interface called by the department not only saves the resources , but also reduces
thedevelopmentdi f icultyofsendingSMS ,thustoguaranteeareliableoperationofthemeteorologicalop-
erationsystem
Keywords : Alibaba Cloud Computing ; micro-service ; monitoring ; alarm ; SMS
为了保护气象值班人员的眼睛,降低值班人员 的工作强度,各种业务系统的状态监控和报警系统
相继开发)及时的短信报警通知让装备设备的维 修更加及时,解决问题的效率也更加高效。
短信报 警功能在实际的业务系统运行中发挥了重要的 作用)
目前,大部分气象部门技术人员采用的短信报 警方式是利用短信猫进行消息的通知,其在开发和
维护时难度较高,并且在发送短信的时容易遇到一 些底层难以定位的问题。
为了进一步开发短信报
警功能,急需重新对短信发送的方案进行改造,使 气象各级单位的技术人员都能简单方便地调用短
收稿日期:2020-02-23
基金项目:江苏省创新创业教育项目“基于微服务的短信报警服务系统的设计"201910848004Y )作者简介:庄学松(1999-),男,江苏宿迁人,研究方向:网络编程;
张 智(1986-),男,江苏扬州人,工程师,研究方向:数据挖掘、大数据分析+
黄可望(1979-),女,江苏无锡人,副教授,研究方向:人工智能与模式识别、计算机网络控制。
42无锡职业技术学院学报第19卷
信发送功能而无需关注底层的发送指令。
1系统结构
1.微服务结构
微服务种构建应用程序的体系结构方法)作框架,微服务呈分布式且松散「结,因此,一个子部件的坏程。
使用微服务的好处发团队能够快速构建
程序的新组件&乃至引领业务。
与
方法相比,微服务分功能的功能模块,每个功能务,并且可以独建和部署,这意味着务运行的失败并其他服务产生影响「叮。
于当行政级别的气象部门存在大量自己开发的系统,这些系统在各部门源,对于各自业务系统的状态警I缺少,开发资源和技术也同样缺少共亨
互)同时,以前的系“整体式''的开发方法,即业务系统进行最小的改动,也需要系统进行重新编码、验证及发行。
此方式将源代码编译在压缩文件中,网站程序文件War文件。
如果系的一部分程序出现错误,则会影响系的其他。
微服务的思大系统拆小系统,每个系统只需要自己的业务逻辑即可。
多人可以同发同系统的中的不同&之间通过流行的RPC框架进行通信「20)
1.2实现方式
要的短信方式包括两种,短信猫发送和网络接口调用。
利猫发送硬件进行发送需要源及手机通信卡,在连接设可在电脑上通过厂家的AT指令或的操作API实现发送。
随着务技术的发展及移动运行商口的,网口的方式逐渐流行起来。
在系统前期的研究过程的是第一种方案,该方案的优发送速、稳、发移动运行商的第方
,其 要购买硬件并理的AT指令,开发周期相对较长。
网务接口的最主要发送的节要,只需要了务提供商的接口协议即可。
但是该方案严重依赖于网络,如果网通无扌大多数系统还件的方式发送短,该方案在过程中发现对AT指令的理解和猫的要理解得比较才能发挥出优势,否则虽然实现了短信发送的功能,但是在发的时效无足业务应的)
1.3基于云短信服务的分布式结构
在系的实方案猫发送短信,但是在段发现某些猫不
支网通,有些猫发送要•几分,期猫还要代码的AT 指令,因此需要在之前系的基础猫速度快、性能、资费更低的网络短
口。
国里云、网、京东、创网1信服务商。
本项目方案里云API 来发警务的础功能,1进的于网务口)
—
—3
短信内容生产方1
短信内容生产方2
入7
短信队列
短信队列
短信服务使用方卜匡1一
Intranet
短歳务使用方2短信服务提供方
篙弋理服务云短信接口
图1短信服务结构
一台可以联网的电脑和阿里云短信服务接口
了务方,代理务通过里云务器的API实现在发功能,外部通过Http地址的形式访问Servlet接口。
各部门原先的值班系系要变化,这些系统作容生产方的角种报警信息放到队列中⑶。
通过代理服务器解决了采用网络短信服务必须要连通外网的,在只能上网的脑在部发送代理程即可
通过网连代理务发送和接收短信。
2服务实施
2.1微服务架构的搭建
系统采用SpringBoot实现短信代理服务。
微务的要化分布式)
它项目的模块分割,之模
第2期庄学松,等:基于SpringBoot的短信服务的设计与实现43
块提供API,供其他功能模块调用。
各模块一般都独立运行,而且有自己的数据库与服务器,通过“化整为零"各个模块之间得到了解耦,系统的扩展性更强。
而SpringBoot就是进行微服务架构开发的一套框架工具,它是在Spring框架基础上发展出来的,借助它可以真正做到前后端分离)
整个系统中短信生产方、短信服务使用方、短信服务提供方都可以按照微服务的思想进行开发)这里主要介绍短信服务提供方实现微服务过程)
(1)在eclipse中创建一个maven应用。
(2)引入SpringBoot框架,需在pom.xml文件中引入SpringBoot父容器并添加Web开发所需要的相应依赖。
主要包括jdk1.8;启动器父包spring-boot-starter-parent;web工程包springboot-starter-web;特定的网络短信的包,如阿里云短信服务的包)
(3)创建SpringBoot引导类)
(4)创建配置文件application.properties,对启动端口进行配置,并配置网络短信发送id、密钥、短信签名及短信模板名)
(5)创建发短信的工具类,其中调用阿里云短信服务的主要代码如下:
//a、创建profile
//accessKeyId:申请的ID,accessKeySecret:
的密
IClientProfilepf=DefaultProfile'getProfile (STRING_CN_HZ",akID,akSecret)+
DefaultProfile.addEndpoint(STRING_CN_ HZ,STRING_CN_HZ,STRING_DYSMS, STRING_DYSMS_URI)+
//b、创建client
IAcsClientacsClient=new DefaultAcsClient (pf)+
//c、创建Request对象
SendSmsRequest rest=new SendSmsRe-quest();
//d、设置Request的参数
//m obile:待发送手机号
restsetPhoneNumbers(mobile)+
//signName:签名
rest.setSignName(signName);
//templateCode:自的模板
reJt.etTemplateCode(templateCode)+
//code:变量信息
rest.setTemplateParam("code":"+STRING_PARA+"}");
//e、用client对应的方法传入request,获response
SendSmsResponsereturnValue=acsClient. getAcsResponse(rest)+
//f、在response中获得返回的参数值
>etu>n>etu>nValue+
2.2阿里云短信接入配置
系统采用的网络短信服务商为阿里云短信,主要接入流程如下/0:
(1)到官网上开通短信服务。
短信服务开通后需要获取accessKey和accessKeySecret0
(2)创建签名并等待官方审核(一般需要等待2个小时),签名指的是短信前面显示的名称,比如“【气象短信报警接口】短信正文••••”中括号里面的就是签名)
(3)创建短信发送模板并等待官方审核,模板就是短信的正文中不变的部分,再加上一部分参数输入的描述)如,模版内容:报警等级为{clss},报警内容为{text}。
其中有两个变量,分别为class-级text-容)
(4)在签模板审通过能这
模板发送短信,这与其他短信服务直接在身份验证发送所)
(5)根据业务应用选择合适的短信套餐)至此配置完成,可以利用阿里云短信服务的API发送短信。
2.3短信服务方调用
阿里云短信服务API调用封装后即可在短信代理处进行调用,根据返回的结果判断调用是否成功)在封装后再发布成内网中可以调用的Http服务,即在内网中也可以间接地调用阿里云短信服务)要代码如:
CommonResponse returnValue=SMSsend (phoneNo,text);
if(returnValue!=null ii returnValue. getHttpStatusO==200){
St>ingdata=>etu>nValue.getData($;
Map map=JSON.pa>seObject(data,Map. class);
("send message status is:}" +phone+"andtextis"+text+","+map. get("Text"));
短信服务接口通过http的形式暴露外部调用接口)HTTP格式为:
44无锡职业技术学院学报第19卷
http://Address:Port/smsSend/send?user= I::ipwd=I::iphoneNo=::::itext=::::iprior=:::itoken=:: ::
Address和Port是服务提供方供外部访问用的入口;user和pwd是对短信的使用者进行身份鉴别,防止非法调用。
只有在验证通过后才能调用阿里云服务封装后的短信发送接口。
2.4缓存机制
在报警事件产生时需要及时地推送给业务值班人员,值班人员根据报警内容排查并解决问题。
但并不是报警推送越多越好,需要把握一个度,不能漏掉重要信息,又不能频繁推送信息影响值班人员对重要信息的判断。
频繁推送报警内容甚至会对短信推送功能产生抵触心理。
因此需要针对不同等级,不同内容制定详细的频次推送规划,记录每一个短信在一段时间内推送到相关人员的频次,当达到一定的阈限后不能继续推送报警信息。
除了在发生或即将发生报警事件时及时调用短信服务将报警内容推送给指定人员外,还有其他的内容需要短信推送给相关人员。
如每个值班人员还关心每个整点的业务运行情况是否正常,每天整体情况运行如何,每月状态统计信息如何。
因此,需要定时将业务运行情况、软件和系统资源的运行情况汇总并发给相关人员做实时监控。
对于定期推送的不同种类的短信需要精确地推送给指定的人员,不能推送出现混乱。
如果因为网络、接口服务器、软件系统、机器等原因不能保证短信发送功能7:24小时连续工作,需要将发送的成功状态、发送的记录保存下来。
对于上述两种情况采用Redis实现短信发送状态的缓存。
Redis是一种开源的键值数据库,由于非常优异的性能和可持久化的特性使得它被广泛地应用到各大网站服务平台中5。
SpringBoot 中除了支持关系型数据库Oracle、MySql、SqlServ-er外,也对Redis等非关系型数据进行了自动化支持。
因此,在SpringBoot中利用集成的Redis组件可方便地对数据进行CRUD操作。
2.5短信发送的注意点
国内短信内容计费方案一般是根据短信内容中的字数进行收费,如果短信字数达到一定的长度(一般为70个)就按多条短信进行计费。
一般情况下,网络短信服务商对同一个手机号码发送短信通知的条数有限制,比如阿里云短信服务支持50条/天。
如果发送字数超过限额后也会提示业务限流。
单条短信字数也有限制,一般达到500多个字,超限的话会发送失败。
国内短信支持全网通发送,并且支持向国际和中国的港澳台运营商的手机发送短信,但是一次最发送的的手数,同网运商可能不一样,比如阿里云一次最多可向1000个手机号码发送短信。
3
基于Springboot实现短信报警的微服务系统结构,结合Redis的主要特性,利用其优异的数据库条目读写效率的优势,实现了短信服务的快速调用,提高了整个系统的可维护性和用户体验。
短信代理服务通过Http方式发布接口供外部调用,通过接口的实现方可以实时反馈一些状态信息,比如某个号码发送频率。
后期设计可以在后端根据每个号码的发送特性制作统计报表并可以进行流量控制以防止恶意发送。
参考文献:
[1]谢伟.基于微服务架构的开放平台消息系统的设计
与实现[D].南京:东南大学,201&
[2]向逸尘.微服务在智慧城市平台建设中的应用初探
[J].计算技术与自动化,2019(3):137.
/]张智.一种分布式短信报警服务系统的设计[J].无锡职业技术学院学报,2019(3):43-46.
[4]网易IT培训.如何设计微服务中的短信服务[EB/
OL].(2019-01-11)[2020-02-11],http://dy.163.
com/v2/article/detail/E581O9LA0518KCLV.html. /]刘敏.基于SpringBoot框架社交网络平台的设计与实现[D].长沙:湖南大学,201&
责任编辑陈桂梅。