4.阿里大于短信服务

4.1.demo

注册页面上有短信发送的按钮,当用户点击发送短信,我们需要生成验证码,发送给用户。我们将使用阿里提供的阿里大于来实现短信发送。

参考课前资料的《阿里短信.md》学习demo入门

4.2.创建短信微服务

因为系统中不止注册一个地方需要短信发送,因此我们将短信发送抽取为微服务:leyou-sms-service,凡是需要的地方都可以使用。

另外,因为短信发送API调用时长的不确定性,为了提高程序的响应速度,短信发送我们都将采用异步发送方式,即:

  • 短信服务监听MQ消息,收到消息后发送短信。
  • 其它服务要发送短信时,通过MQ通知短信微服务。

4.2.1.创建module

4.2.2.pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>leyou</artifactId><groupId>com.leyou.parent</groupId><version>1.0.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.leyou.sms</groupId><artifactId>leyou-sms-service</artifactId><version>1.0.0-SNAPSHOT</version><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>3.3.1</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dysmsapi</artifactId><version>1.0.0</version></dependency></dependencies>
</project>

4.2.3.编写启动类

@SpringBootApplication
public class LeyouSmsApplication {public static void main(String[] args) {SpringApplication.run(LeyouSmsApplication.class, args);}
}

4.2.4.编写application.yml

server:port: 8086
spring:application:name: sms-servicerabbitmq:host: 192.168.56.101username: leyoupassword: leyouvirtual-host: /leyou

4.3.编写短信工具类

项目结构:

4.3.1.属性抽取

我们首先把一些常量抽取到application.yml中:

leyou:sms:accessKeyId: JWffwFJIwada # 你自己的accessKeyIdaccessKeySecret: aySRliswq8fe7rF9gQyy1Izz4MQ # 你自己的AccessKeySecretsignName: 乐优商城 # 签名名称verifyCodeTemplate: SMS_133976814 # 模板名称

然后注入到属性类中:

@ConfigurationProperties(prefix = "leyou.sms")
public class SmsProperties {String accessKeyId;String accessKeySecret;String signName;String verifyCodeTemplate;public String getAccessKeyId() {return accessKeyId;}public void setAccessKeyId(String accessKeyId) {this.accessKeyId = accessKeyId;}public String getAccessKeySecret() {return accessKeySecret;}public void setAccessKeySecret(String accessKeySecret) {this.accessKeySecret = accessKeySecret;}public String getSignName() {return signName;}public void setSignName(String signName) {this.signName = signName;}public String getVerifyCodeTemplate() {return verifyCodeTemplate;}public void setVerifyCodeTemplate(String verifyCodeTemplate) {this.verifyCodeTemplate = verifyCodeTemplate;}
}

4.3.2.工具类

我们把阿里提供的demo进行简化和抽取,封装一个工具类:

@Component
@EnableConfigurationProperties(SmsProperties.class)
public class SmsUtils {@Autowiredprivate SmsProperties prop;//产品名称:云通信短信API产品,开发者无需替换static final String product = "Dysmsapi";//产品域名,开发者无需替换static final String domain = "dysmsapi.aliyuncs.com";static final Logger logger = LoggerFactory.getLogger(SmsUtils.class);public SendSmsResponse sendSms(String phone, String code, String signName, String template) throws ClientException {//可自助调整超时时间System.setProperty("sun.net.client.defaultConnectTimeout", "10000");System.setProperty("sun.net.client.defaultReadTimeout", "10000");//初始化acsClient,暂不支持region化IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou",prop.getAccessKeyId(), prop.getAccessKeySecret());DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);IAcsClient acsClient = new DefaultAcsClient(profile);//组装请求对象-具体描述见控制台-文档部分内容SendSmsRequest request = new SendSmsRequest();request.setMethod(MethodType.POST);//必填:待发送手机号request.setPhoneNumbers(phone);//必填:短信签名-可在短信控制台中找到request.setSignName(signName);//必填:短信模板-可在短信控制台中找到request.setTemplateCode(template);//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为request.setTemplateParam("{\"code\":\"" + code + "\"}");//选填-上行短信扩展码(无特殊需求用户请忽略此字段)//request.setSmsUpExtendCode("90997");//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者request.setOutId("123456");//hint 此处可能会抛出异常,注意catchSendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);logger.info("发送短信状态:{}", sendSmsResponse.getCode());logger.info("发送短信消息:{}", sendSmsResponse.getMessage());return sendSmsResponse;}
}

4.4.编写消息监听器

接下来,编写消息监听器,当接收到消息后,我们发送短信。

@Component
@EnableConfigurationProperties(SmsProperties.class)
public class SmsListener {@Autowiredprivate SmsUtils smsUtils;@Autowiredprivate SmsProperties prop;@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "leyou.sms.queue", durable = "true"),exchange = @Exchange(value = "leyou.sms.exchange", ignoreDeclarationExceptions = "true"),key = {"sms.verify.code"}))public void listenSms(Map<String, String> msg) throws Exception {if (msg == null || msg.size() <= 0) {// 放弃处理return;}String phone = msg.get("phone");String code = msg.get("code");if (StringUtils.isBlank(phone) || StringUtils.isBlank(code)) {// 放弃处理return;}// 发送消息SendSmsResponse resp = this.smsUtils.sendSms(phone, code, prop.getSignName(),prop.getVerifyCodeTemplate());}
}

我们注意到,消息体是一个Map,里面有两个属性:

  • phone:电话号码
  • code:短信验证码

SpringCloud___阿里大于短信服务相关推荐

  1. 阿里大于短信服务API Demo及使用说明

    关于短信验证,本人使用的是阿里大于的服务平台.不啰嗦废话,直接上步骤: 首先需要在阿里大于短信服务国内消息中注册个性签名及短信模板.这里需费些时间,只要注册成功,便可以使用验证功能了.下面是短信模板截 ...

  2. 阿里大于短信服务以及与SpringBoot的整各

    1.阿里大于概述 阿里大于是阿里云旗下产品,融合了三大运营商的通信能力,通过将传统通信业务和能力与互联网相结合,创新融合阿里巴巴生态内容,全力为中小企业和开发者提供优质服务阿里大于提供包括短信.语音. ...

  3. 阿里大于短信服务_异常_01_InvalidTimeStamp.Expired

    一.异常信息 dm.aliyuncs.com InvalidTimeStamp.Expired Specified time stamp or date value is expired. 二.异常原 ...

  4. java实现阿里大于短信发送服务

    这篇文章主要介绍一下手机号注册,发送短信验证码的功能 觉得有帮助的点赞支持一下吧. 这里我们采用的是阿里大于的服务来实现,链接如下:阿里云 界面描述还是比较详细的,展示了短信服务的完整流程快速学习短信 ...

  5. egg.js 调用阿里云(阿里大于)短信验证码服务

    1.开通阿里云短信服务 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 可以免费申请 企业短信验证码 200条 重点是: 签名名称:接收验证码内容时,[]里的文字. 短信模板code:相当于 ...

  6. 阿里大于短信发送调用

    阿里大于使用文档 Sdk 所需sdk文件:taobao-sdk-java-auto_1455552377940-20160607.jar 下载地址:https://www.alidayu.com/ce ...

  7. 最新阿里云短信服务接口类【亲测成功】

    阿里大于 最新的阿里云短信接口,适用于阿里大于搬家以后的情况. 之前一直用阿里大于的短信接口,最近上项目时发现阿里大于悄悄地搬家到了阿里云!阿里云的SDK文件繁多,看得一头雾水!下面代码是最新的可适用 ...

  8. 阿里云短信服务-个人账户测试短信服务

    前言 阿里的短信服务分为三块,一是阿里云短信服务,二是云通讯,三是阿里大于,不过后期都会统一到阿里云短信服务平台的,所以这里只需要学习如何使用阿里云短信服务就可以了. 如果是个人开发者,项目呢还没上线 ...

  9. 对接阿里云短信服务(附视频教程)

    阿里云短信服务文档使用指引: https://help.aliyun.com/document_detail/59210.html B站视频教程链接: https://www.bilibili.com ...

最新文章

  1. 大学计算机专业全英文论文,5计算机专业 外文文献 英文文献 外文翻译 jsp应用框架 中英对照 大学学位论文.doc...
  2. CSDN 十大技术主题盘点-AI篇
  3. 在阿里云上创建一个个人网盘(owncloud)
  4. vue 实现动态增加输入框_vue实现一个6个输入框的验证码输入组件
  5. 软件测试作业3:软件测试的16条公理
  6. python爬虫-异常处理
  7. linux查看内存_嵌入式操作系统的内存,你了解多少?
  8. 计算机系统基础知识——详解二进制正负数及补码设计
  9. 订单同步工程标准化改造事记
  10. 如何把握软件产品的质量
  11. 回首2018 | 分析型数据库AnalyticDB: 不忘初心 砥砺前行
  12. SQL Server 查询哪些对象(表\视图\存储过程)包含有某些内容
  13. 远程控制电脑的实现方法汇总
  14. 高校公寓管理系统java下载_Spring+SpringMVC+Mybatis高校宿舍管理系统.zip
  15. 过程试图写入的管道不存在
  16. 服务器虚拟化及云计算基础实验
  17. 1001. Poker (思维 / 模拟)(2020年百度之星*程序设计大赛-初赛二)
  18. 计算机基础——无处不网络(2)
  19. 企业架构TOGAF介绍
  20. 在ROS中实现双目相机校正(以PointGrey为例)

热门文章

  1. 22.10.19补卡 CF-1742F
  2. 计算机网络--路由器
  3. 打印棱形--进阶(Java)
  4. 微信小程序 输入框点击清空按钮 清空值
  5. python画高程图
  6. unity gaia 自定义高程图无法识别解决方法
  7. python中数字应该用什么表示,python中可以表示的最小数字是多少?
  8. [H3C]配置命令之MAC地址表项应用:封禁MAC地址
  9. greenDAO基本使用详解
  10. Windows Installer CleanU(Windows 安装程序清理实用程序 )