先 创建sms短信微服务工程,有可能很多工程要使用我们创建的短信服务.
项目环境: SpringBoot SpringClould
步骤:

  1. config

SmsConfiguration:

/*** 创建阿里云短信的客户端,把客户端放入ioc容器*/
@Configuration
@EnableConfigurationProperties(SmsProperties.class)  //从配置文件中读取内容
public class SmsConfiguration {/*** 初始化 阿里云短信客户端* @param prop* @return*/@Beanpublic IAcsClient acsClient(SmsProperties prop){DefaultProfile profile = DefaultProfile.getProfile(prop.getRegionID(),prop.getAccessKeyId(),prop.getAccessKeySecret());return new DefaultAcsClient(profile);}
}

SmsProperties:


读取配置文件中定义需要的实体
@Data
@ConfigurationProperties(prefix = "ly.sms")
//这里的prefix = "ly.sms"代表读取配置文件中配置的前缀
public class SmsProperties {private String accessKeyId;//: LTAI4GECXLNqMYLULWMAWm4Uprivate String accessKeySecret;//: IgT4T7uyd5lLl4Xtg2oYLKGb6YuI52private String signName;//: 顺义leyou项目 # 签名名称private String verifyCodeTemplate;//: SMS_169636334 # 模板名称private String domain;//: dysmsapi.aliyuncs.com # 域名private String action;//: SendSMS # API类型,发送短信private String version;//: 2017-05-25 # API版本,固定值private String regionID;//: cn-hangzhou # 区域id
}
  1. contants
public final class SmsConstants {/*** 请求参数*/public static final String SMS_PARAM_KEY_PHONE = "PhoneNumbers";public static final String SMS_PARAM_KEY_SIGN_NAME = "SignName";public static final String SMS_PARAM_KEY_TEMPLATE_CODE = "TemplateCode";public static final String SMS_PARAM_KEY_TEMPLATE_PARAM= "TemplateParam";/*** 响应结果*/public static final String SMS_RESPONSE_KEY_CODE = "Code";public static final String SMS_RESPONSE_KEY_MESSAGE = "Message";/*** 状态*/public static final String OK = "OK";
}
  1. listener 短信监听器使用的是mq
/*** 发验证码短信的监听器*/
@Slf4j
@Component   //交给包扫描的注解,让他扫描这个类
@RocketMQMessageListener(consumerGroup = SMS_VERIFY_CODE_CONSUMER,topic = SMS_TOPIC_NAME,selectorExpression = VERIFY_CODE_TAGS)
public class SendMessageListener implements RocketMQListener<String> {@Autowiredprivate SmsHelp smsHelp;   //短信工具类@Autowiredprivate SmsProperties prop;/*** 验证码短信* @param message  {"phone":12312,"code":"12345613"}*/@Override  //message参数内容public void onMessage(String message) {//日志log.info("[sms服务]接收到消息,msg={}",message);Map<String, String> msg = JsonUtils.toMap(message, String.class, String.class);//将这个手机号拿出来,然后删掉,要的是code:"code":"12345613"String phone = msg.remove("phone");//sdk需要的param内容是{"code":"1111"}smsHelp.sendMessage(phone,prop.getSignName(),prop.getVerifyCodeTemplate(),JsonUtils.toString(msg));}
}
  1. utils
/*** 短信工具类*/
@Slf4j
@Component  //放入Soc容器中
public class SmsHelp {private IAcsClient client;private SmsProperties prop;public SmsHelp(IAcsClient client, SmsProperties prop) {this.client = client;this.prop = prop;}public void sendMessage(String phone,String signName,String template,String param){CommonRequest request = new CommonRequest();request.setProtocol(ProtocolType.HTTPS);request.setMethod(MethodType.POST);request.setDomain(prop.getDomain());request.setVersion(prop.getVersion());request.setAction(prop.getAction());request.putQueryParameter(SMS_PARAM_KEY_PHONE, phone);request.putQueryParameter(SMS_PARAM_KEY_SIGN_NAME, signName);request.putQueryParameter(SMS_PARAM_KEY_TEMPLATE_CODE, template);request.putQueryParameter(SMS_PARAM_KEY_TEMPLATE_PARAM, param);try {CommonResponse response = client.getCommonResponse(request);if(response.getHttpStatus() >= 300){log.error("【SMS服务】发送短信失败。响应信息:{}", response.getData());}// 获取响应体Map<String, String> resp = JsonUtils.toMap(response.getData(), String.class, String.class);// 判断是否是成功if(!StringUtils.equals(OK, resp.get(SMS_RESPONSE_KEY_CODE))){// 不成功,log.error("【SMS服务】发送短信失败,原因{}", resp.get(SMS_RESPONSE_KEY_MESSAGE));throw new LyException(ExceptionEnum.SEND_MESSAGE_ERROR);}log.info("【SMS服务】发送短信成功,手机号:{}, 响应:{}", phone, response.getData());} catch (ServerException e) {log.error("【SMS服务】发送短信失败,服务端异常。", e);} catch (ClientException e) {log.error("【SMS服务】发送短信失败,客户端异常。", e);}}
}
  1. 启动类LySms
@SpringBootApplication
public class LySms {public static void main(String[] args) {SpringApplication.run(LySms.class, args);}
}
  1. application.yml
server:port: 8086
spring:application:name: sms-service
rocketmq:name-server: 127.0.0.1:9876producer:   #用于测试group: ${spring.application.name}   #生产者组send-message-timeout: 20000         #超时时间
# 自己去阿里云短信注册,然后去申请模板
ly:sms:accessKeyId: LTAI4GECXLNqMYLULWMAWm4UaccessKeySecret: IgT4T7uyd5lLl4Xtg2oYLKGb6YuI52signName: leyou项目 # 签名名称verifyCodeTemplate: SMS_169636334 # 模板名称domain: dysmsapi.aliyuncs.com # 域名action: SendSMS # API类型,发送短信version: 2017-05-25 # API版本,固定值regionID: cn-hangzhou # 区域id
  1. 测试发送验证码短信TestSms
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestSendSms {@Autowiredprivate RocketMQTemplate rocketMQTemplate;/*** 发送rocketMQ的消息*/@Testpublic void testSend(){String dest = SMS_TOPIC_NAME+":"+ VERIFY_CODE_TAGS;HashMap<String, String> msg = new HashMap<>();msg.put("phone","电话号码");msg.put("code","467512");rocketMQTemplate.convertAndSend(dest, JsonUtils.toString(msg));}
}

11. common公共的工具类[这里是一个独立的微服务工程]
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020073123465178.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTU5MTYxNw==,size_16,color_FFFFFF,t_70)
```java
public abstract class RocketMQConstants {public static final class TOPIC {/*** 短信服务*/public static final String SMS_TOPIC_NAME = "ly-sms-topic";}public static final class TAGS {/*** 发送短信验证码TAGS*/public static final String VERIFY_CODE_TAGS = "sms-verify-code";}public static final class CONSUMER{/*** 短信发送 的消费者*/public static final String SMS_VERIFY_CODE_CONSUMER = "SMS_VERIFY_CODE_CONSUMER";}

pom依赖:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--阿里云依赖--><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.1.1</version></dependency><!--MQ依赖--><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.0.2</version></dependency><!--这个就是上面那个common工程的依赖--><dependency><groupId>com.leyou</groupId><artifactId>ly-common</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies><!--打包--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

SpringBoot实现阿里短信SDK发送短信,使用MQ监听器相关推荐

  1. 使用阿里云的短信服务发送短信

    原文地址使用阿里云的短信服务发送短信 在给客户开发一个信息发送功能的时候,需要涉及到短信的发送,短信发送一般不同的厂商提供的接口不同,处理方式也不太一样,之前用的一个厂商的,提供了一个封装类就很容易发 ...

  2. 阿里云接口实现发送短信验证码

    java 阿里云接口实现发送短信验证码 1. 阿里云后台配置短信相关 1.1 开通短信服务 1.2 添加模板签名 1.3 创建秘钥 1.4 短信需要后台授权--注意点 2 java--简单实现短信验证 ...

  3. tp6框架结合阿里短信接口发送短信并记录redis

    tp6框架结合阿里短信接口发送短信并记录redis 1> 开通阿里云短信服务 2> 安装redis服务 3>config配置文件 创建sms.php 文件,配置阿里云短信信息 ret ...

  4. 如何使用阿里巴巴短信服务发送短信验证码

    关于调用阿里巴巴短信服务发送短信验证的接口的方法: 用户的注册 1.首先我们需要在阿里大于(www.alidayu.com)注册一个账号登录 点击进入控制台 点击使用短信服务 然后需要你申请签名和模板 ...

  5. 移动MAS短信平台发送短信

    MAS短信平台发送短信分为两种方式 参考文档下载 一.sdk调用 using mas.ecloud.sdkclient; using System;namespace 短信发送 {class Prog ...

  6. linux 短信功能,Android调用系统短信功能发送短信

    Android调用系统短信功能发送短信有两种方法: 第一种,设定发送的号码,和内容,界面没有联系人,群组组等按钮,如下图所示: 代码如下: Uri smsToUri = Uri.parse(" ...

  7. 安卓短信功能全解:调用系统短信功能发送短信、彩信,使用SmsManager发送短信,并监听发送短信的投递情况,使用广播接收器监听接收的短信。

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓短信功能全解:调用系统短信功能发送短信.彩信,使用SmsManager发送短信,并监听发送短信的投递情况,使用广播接收器监听接收的短信. 首先需要 ...

  8. php对接短信宝,php使用短信宝发送短信的方法

    本文主要和大家分享php使用短信宝发送短信的方法,使用短信宝需要先在官网上注册一个用户名密码,希望能帮助到大家. 注意:如果没有购买短信,则只用来测试短信速度,短信内容不可编辑,只可修改验证码数字.. ...

  9. TP5 短信宝 发送短信验证码

    一.请求发送短信接口 public function sendCode(){//接收手机号$data['phone'] = input('get.phone');//判断是否接到手机号$validat ...

最新文章

  1. caffe loss
  2. mysql 分时统计_mysql中数据统计的技巧备忘录
  3. 关于 xml 库运行时的segmentation fault 问题
  4. CF809C Find a car
  5. Scala集合:ListBuffer可变集合的head/tail/last/init方法
  6. FastDFS(分布式文件系统)
  7. centos 6.5 x64编译有python的vim7.4
  8. activiti 流程文件存哪里_JAVA-工作流引擎-activiti-Tasks介绍
  9. linux下apache安装ssl,linux下apache安装ssl步骤
  10. 优先部署EDI系统把握信息传输的主动权
  11. 会员管理系统单机版哪里有?
  12. ps随意改变图层形态
  13. EtherCAT 之邮箱
  14. linux6查看用户密码,linux如何查看所有的用户(user)、用户组(group)、密码(password/passwd)...
  15. 谷歌地图应用——基础篇之入门
  16. 构造函数能否被继承,为什么?
  17. terrasolid纵向看点云
  18. 怎么检查计算机硬盘有没有供电,事实:如何检测计算机硬盘是否有问题?如何使用硬盘检测工具...
  19. 基于FPGA的时序分析
  20. 互联网运营打造个人微博之道

热门文章

  1. jQuery学习:点击 切换图片向左向右移动类似
  2. c对文件的一些基本操作
  3. Python爬虫 | 批量爬取今日头条街拍美图
  4. 数据清洗第八章-数据仓库
  5. 银角大王 python_2020年3月14日python学习笔记——练习题(第二章)——————重要...
  6. 自己动手制作一个Chrome插件 入门级
  7. 正弦曲线投影及ENVI下Modis数据坐标投影定义
  8. html, css知识点
  9. 数值线性代数之列主元Gauss消去法(MATLAB)
  10. 用Python一键生成微信好友头像墙