1、需求分析
构建一个通用的短信发送服务(独立于项目的单独工程),接收activeMQ的消息(MAP类型) 消息包括手机号(mobile)、短信模板号(template_code)、签名(sign_name)、参数字符串(param )。
2、代码实现
2.1、工程创建
(1)创建工程itcast_sms (JAR工程),POM文件引入依赖
1.7org.springframework.bootspring-boot-starter-parent1.4.0.RELEASE org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-activemqcom.aliyunaliyun-java-sdk-dysmsapi1.0.0-SNAPSHOTcom.aliyunaliyun-java-sdk-core3.2.5
(2)创建引导类
package cn.newbie.sms;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
(3)创建配置文件application.properties
server.port=9003
spring.activemq.broker-url=tcp://192.168.25.135:61616
accessKeyId=不告诉你
accessKeySecret=不告诉你
3、短信工具类
package cn.newbie.sms;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
/*** 短信工具类* @author Administrator**/
@Component
public class SmsUtil {//产品名称:云通信短信API产品,开发者无需替换static final String product = "Dysmsapi";//产品域名,开发者无需替换static final String domain = "dysmsapi.aliyuncs.com";@Autowiredprivate Environment env;// TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)/*** 发送短信* @param mobile 手机号* @param template_code 模板号* @param sign_name 签名* @param param 参数* @return* @throws ClientException*/public SendSmsResponse sendSms(String mobile,String template_code,String sign_name,String param) throws ClientException {String accessKeyId =env.getProperty("accessKeyId");String accessKeySecret = env.getProperty("accessKeySecret");//可自助调整超时时间System.setProperty("sun.net.client.defaultConnectTimeout", "10000");System.setProperty("sun.net.client.defaultReadTimeout", "10000");//初始化acsClient,暂不支持region化IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);IAcsClient acsClient = new DefaultAcsClient(profile);//组装请求对象-具体描述见控制台-文档部分内容SendSmsRequest request = new SendSmsRequest();//必填:待发送手机号request.setPhoneNumbers(mobile);//必填:短信签名-可在短信控制台中找到request.setSignName(sign_name);//必填:短信模板-可在短信控制台中找到request.setTemplateCode(template_code);//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为request.setTemplateParam(param);//选填-上行短信扩展码(无特殊需求用户请忽略此字段)//request.setSmsUpExtendCode("90997");//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者request.setOutId("yourOutId");//hint 此处可能会抛出异常,注意catchSendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);return sendSmsResponse;}public QuerySendDetailsResponse querySendDetails(String mobile,String bizId) throws ClientException {String accessKeyId =env.getProperty("accessKeyId");String accessKeySecret = env.getProperty("accessKeySecret");//可自助调整超时时间System.setProperty("sun.net.client.defaultConnectTimeout", "10000");System.setProperty("sun.net.client.defaultReadTimeout", "10000");//初始化acsClient,暂不支持region化IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);IAcsClient acsClient = new DefaultAcsClient(profile);//组装请求对象QuerySendDetailsRequest request = new QuerySendDetailsRequest();//必填-号码request.setPhoneNumber(mobile);//可选-流水号request.setBizId(bizId);//必填-发送日期 支持30天内记录查询,格式yyyyMMddSimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");request.setSendDate(ft.format(new Date()));//必填-页大小request.setPageSize(10L);//必填-当前页码从1开始计数request.setCurrentPage(1L);//hint 此处可能会抛出异常,注意catchQuerySendDetailsResponse querySendDetailsResponse = acsClient.getAcsResponse(request);return querySendDetailsResponse;}
}
4、消息监听类
package cn.newbie.sms;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
/*** 消息监听类* @author Administrator*/
@Component
public class SmsListener {@Autowiredprivate SmsUtil smsUtil;@JmsListener(destination="sms")public void sendSms(Map map){ try {SendSmsResponse response = smsUtil.sendSms(map.get("mobile"), map.get("template_code"),map.get("sign_name"),map.get("param") ); System.out.println("Code=" + response.getCode());System.out.println("Message=" + response.getMessage());System.out.println("RequestId=" + response.getRequestId());System.out.println("BizId=" + response.getBizId()); } catch (ClientException e) {e.printStackTrace(); } }
}
5、代码测试
修改springboot-demo 的QueueController.java
@RequestMapping("/sendsms")public void sendSms(){Map map=new HashMap<>();map.put("mobile", "13900001111");map.put("template_code", "SMS_85735065"); map.put("sign_name", "黑马");map.put("param", "{\"number\":\"102931\"}");jmsMessagingTemplate.convertAndSend("sms",map);}
启动newbie_sms
启动springboot-demo
地址栏输入:http://localhost:8088/sendsms.do
观察控制台输出
随后短信也成功发送到你的手机上
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!