短信微服务开发 SpringBoot + ActiveMQ + 阿里大于短信API

1、项目简介

       短信微服务开发,其应用场景一般是注册时短信验证码的接收、提示用户注册成功等场景。在短信微服务开发中,本文主要使用技术为:SpringBoot ,快速搭建web应用,即:消息的生产者,消息的消费者; ActiveMQ,消息的中间件,消息的异步接收及异步发送;调用第三方短信服务接口,阿里大于短信API,使用阿里云提供的短信服务。

2、项目架构图

3、生产者项目构建

(1)建立maven工程,注意是jar工程

(2)引入pom文件

<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">

  <modelVersion>4.0.0</modelVersion>

  <groupId>cn.test.demo</groupId>

  <artifactId>SpringBootDemo</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <properties>  

    <java.version>1.7</java.version>   //  jdk 版本号

  </properties>

 

  <parent>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-parent</artifactId>

    <version>1.4.0.RELEASE</version>

  </parent> 

  <dependencies>

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-web</artifactId>     // springBoot 起步依赖

    </dependency>

    <dependency> 

         <groupId>org.springframework.boot</groupId> 

         <artifactId>spring-boot-devtools</artifactId>     // springBoot   热部署

     </dependency> 

    <dependency>

         <groupId>org.springframework.boot</groupId>

         <artifactId>spring-boot-starter-activemq</artifactId>     // activeMQ 起步依赖

    </dependency>

  </dependencies>

 

</project>

(3)src/main/java  工程文件

程序入口文件  Application

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);

         }

}

生产者

*/

@RestController

public class QueueController {

    

     @Autowired

     private JmsMessagingTemplate jmsMessagingTemplate;

 

     @RequestMapping("/sendmap")

     public void sendMap(){

          Map map = new HashMap<>();

          map.put("mobile", "18800000000");    //  消息消费方的手机号

          map.put("template_code", "SMS_100000000");   // 消息内容模板, 在阿里大于服务上编辑

          map.put("sign_name", "aaa");  // 消息签名, 在阿里大于服务上申请

          map.put("param", "{\"name\":\"bbb\"}");  // 消息模板中使用的参数,例如${name}

         

          jmsMessagingTemplate.convertAndSend("sms", map);

     }

}

(4)src/main/resources 下

application.properties

server.port=8088    // tomcat 端口号

spring.activemq.broker-url=tcp://192.168.25.131:61616    //activeMQ 客户端地址

4、消费者项目构建

(1)建立maven工程,注意是jar工程

(2)引入pom文件

<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">

  <modelVersion>4.0.0</modelVersion>

  <groupId>cn.test.sms</groupId>

  <artifactId>test_sms_service</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <properties>  

    <java.version>1.7</java.version>       //  jdk 版本号

  </properties>

 

  <parent>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-parent</artifactId>   

    <version>1.4.0.RELEASE</version>

  </parent> 

  <dependencies>

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-web</artifactId>   // springBoot 起步依赖

    </dependency>

    <dependency> 

         <groupId>org.springframework.boot</groupId> 

         <artifactId>spring-boot-devtools</artifactId>    // springBoot   热部署

     </dependency> 

    <dependency>

         <groupId>org.springframework.boot</groupId>

         <artifactId>spring-boot-starter-activemq</artifactId>    // activeMQ 起步依赖

    </dependency>

    <dependency>

          <groupId>com.aliyun</groupId>

          <artifactId>aliyun-java-sdk-dysmsapi</artifactId>    //  阿里短信服务依赖

          <version>1.0.0-SNAPSHOT</version>

     </dependency>

     <dependency>

          <groupId>com.aliyun</groupId>

          <artifactId>aliyun-java-sdk-core</artifactId>   //  阿里短信服务依赖

          <version>3.2.5</version>

     </dependency>

  </dependencies>

</project>

(3)src/main/java  工程文件

程序入口文件  Application,  同生产者的,copy就好

SmsUtil.java

@Component

public class SmsUtil {

 

    //产品名称:云通信短信API产品,开发者无需替换

    static final String product = "Dysmsapi";

    //产品域名,开发者无需替换

    static final String domain = "dysmsapi.aliyuncs.com";

    @Autowired

    private Environment env;

   

    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 此处可能会抛出异常,注意catch

        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);

 

        return sendSmsResponse;

    }

消费者

@Component

public class SmsListener {

 

     @Autowired

     private SmsUtil smsUtil;

    

     @JmsListener(destination="sms")

     public void sendSms(Map<String,String> 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());

              

          } catch (ClientException e) {

               // TODO Auto-generated catch block

               e.printStackTrace();

          }

     }

}

(4)src/main/resources 下

application.properties

server.port=9003   //  服务端口号

spring.activemq.broker-url=tcp://192.168.25.131:61616   //activeMQ 客户端

accessKeyId= ********      //  阿里大于服务上申请

accessKeySecret=  ********     //  阿里大于服务上申请

5、项目启动

(1) 生产者在浏览器中:

http://localhost:8088/sendmap 回车

产生消息,并推送给activeMQ。

(2) 将生产者和消费者中的application.java 均启动, 消费者监听消息,接收activeMQ的消息,消费它!

(3) 稍等一会,在手机号为:18800000000 , 发送内容为:SMS_100000000 对应的模板内容的短信

短信微服务搭建成功!

猜你喜欢

转载自blog.csdn.net/py_tamir/article/details/81588991