使用activemq接受监听并完成短信的发送 ---腾讯云短信

一、准备工作
    1)、微服务发送短信。
    1.创建maven工程,导入spring微服务相关依赖:
    
    
    
        org.springframework.boot
        spring-boot-starter-parent
        1.4.0.RELEASE
   

    4.0.0
    pyg-qsms
   
       
            org.springframework.boot
            spring-boot-starter-web
       

       
            org.springframework.boot
            spring-boot-starter-activemq
       

       
            com.github.qcloudsms
            qcloudsms
            1.0.5
       

       
            javax.servlet
            servlet-api
            2.5
       

       
            org.json
            json
            20170516
       

       
            org.apache.httpcomponents
            httpclient
            4.5.3
       

       
            org.apache.httpcomponents
            httpcore
       

       
            commons-codec
            commons-codec
            1.11
            compile
       

       
            org.apache.httpcomponents
            httpmime
            4.5.1
       

        
        
       
            org.apache.logging.log4j
            log4j-api
       

       
            org.apache.logging.log4j
            log4j-core
       

        
   

    
    2.在resource包下,创建application.properties以及导入log4j.propertites
        2.1 application.propertities如下:
            # 改变默认端口
            server.port=8889
            
            #activemq所在服务器
            spring.activemq.broker-url=tcp://192.168.25.130:61616
            
            #腾讯短信秘钥,需要到腾讯云平台申请
            appid=*****
            appkey=******
            #模板Id,需要到腾讯云平台申请
            templateId=*****
            #签名,需要到腾讯云平台申请
            smsSign=*****
                
        2.2 log4j.properties如下:
            ### direct log messages to stdout ###
            log4j.appender.stdout=org.apache.log4j.ConsoleAppender
            log4j.appender.stdout.Target=System.out
            log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
            log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

            ### direct messages to file mylog.log ###
            log4j.appender.file=org.apache.log4j.FileAppender
            log4j.appender.file.File=c:/mylog.log
            log4j.appender.file.layout=org.apache.log4j.PatternLayout
            log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

            ### set log levels - for more verbose logging change 'info' to 'debug' ###

            log4j.rootLogger=debug, stdout
            


二、编写代码

 3.微服务入口(启动微服务监听的入口,所在目录:cn.china3y.pyg.SmsApplication)

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

  
        

***    4.发送短信的工具类(*******)
    

 

package cn.china3y.pyg.qsmsUtils;

		/**
		 * 被监听类调用,用于发送信息
		 */
		@Component
		public class SmsUtils {
			@Autowired
			private Environment env;
			// 短信应用SDK AppID
			//int appid = ***; // 1400开头
			// 短信应用SDK AppKey
			//String appkey = "***";
			// 短信模板ID,需要在短信应用中申请
			//int templateId = ***; // NOTE: 这里的模板ID`7839`只是一个示例,真实的模板ID需要在短信控制台中申请
			//templateId7839对应的内容是"您的验证码是: {1}"
			// 签名
			//String smsSign = "***"; // NOTE: 这里的签名"腾讯云"只是一个示例,真实的签名需要在短信控制台中申请,另外签名参数使用的是`签名内容`,而不是`签名ID

			// 需要发送短信的手机号码
			//String[] phoneNumbers = {env.getProperty("phoneNumbers")};
			
			public void sendSms(String phone, String code,String code_time) {
				String[] phoneNumbers = {phone};

				// 单发短信
				try {

					SmsSingleSender ssender = new SmsSingleSender(Integer.parseInt(env.getProperty("appid")), env.getProperty("appkey"));
					//nationCode:国家码
					//注意:这里的第三个参数,必须与申请的模板内容一致,否则报错:发送的信息与模板内容不一致
					SmsSingleSenderResult result = ssender.send(0, "86", phoneNumbers[0],
							"【签名】您的短信验证码为:" + code + ",验证码时间为"+code_time+"分钟内有效,请尽快完成验证", "", "");
					System.out.print(result);
				} catch (Exception e) {
					// HTTP响应码错误
					e.printStackTrace();
				}

				// 指定模板ID单发短信
				try {
					String[] params = {"***","777","77"};
					//SmsMultiSender msender = new SmsMultiSender(appid, appkey);
					SmsMultiSender msender = new SmsMultiSender(Integer.parseInt(env.getProperty("appid")), env.getProperty("appkey"));
					SmsMultiSenderResult result = msender.sendWithParam("86", phoneNumbers,
							Integer.parseInt(env.getProperty("templateId")), params, env.getProperty("smsSign"), "", "");  // 签名参数未提供或者为空时,会使用默认签名发送短信
					System.out.print(result);
				} catch (Exception e) {
					// HTTP响应码错误
					e.printStackTrace();
				}

				// 发送语音验证码
				// 发送语音通知

				// 拉取短信回执以及回复
				try {
					// Note: 短信拉取功能需要联系腾讯云短信技术支持(QQ:3012203387)开通权限
					int maxNum = 10;  // 单次拉取最大量
					SmsStatusPuller spuller = new SmsStatusPuller(Integer.parseInt(env.getProperty("appid")), env.getProperty("appkey"));

					// 拉取短信回执
					SmsStatusPullCallbackResult callbackResult = spuller.pullCallback(maxNum);
					System.out.println(callbackResult);

					// 拉取回复
					SmsStatusPullReplyResult replyResult = spuller.pullReply(maxNum);
					System.out.println(replyResult);
				} catch (Exception e) {
					// HTTP响应码错误
					e.printStackTrace();
				}
				// 拉取单个手机短信状态
				try {
					int beginTime = 1511125600;  // 开始时间(unix timestamp)
					int endTime = 1511841600;    // 结束时间(unix timestamp)
					int maxNum = 10;             // 单次拉取最大量
					SmsMobileStatusPuller mspuller = new SmsMobileStatusPuller(Integer.parseInt(env.getProperty("appid")), env.getProperty("appkey"));

					// 拉取短信回执
					SmsStatusPullCallbackResult callbackResult = mspuller.pullCallback("86",
							phoneNumbers[0], beginTime, endTime, maxNum);
					System.out.println(callbackResult);

					// 拉取回复
					SmsStatusPullReplyResult replyResult = mspuller.pullReply("86",
							phoneNumbers[0], beginTime, endTime, maxNum);
					System.out.println(replyResult);
				} catch (Exception e) {
					// HTTP响应码错误
					e.printStackTrace();
				}
			}
		}


    
     

以上4步已经可以实现短信发送了,下面使用activemq,中间件接受监听并调用发送短信工具类。


    5.activeMq监听器()

 

package cn.china3y.pyg.qsmsListener;

	/**
	 * 用于监听mq中的sms区域
	 * 当mq ,sms区接收到信息自动触发监听器,获取mq信息,
	 * 调用msUtils.sendSms(phone, code , code_time);实现短息发送
	 */
	@Component
	public class SmsListener {
		@Autowired
		private SmsUtils smsUtils;

	  @JmsListener(destination = "sms")
		public void sendSms(Map smsmap) {
			try {
				String phone = smsmap.get("phone");
				String code = smsmap.get("code");
				String code_time = smsmap.get("code_time");
				//phone:需要发送短信的手机号; code:验证码; code_time:验证码有效时间
				smsUtils.sendSms(phone,code,code_time);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}


  
    6.测试类(cn.china3y.pyg.SmsApplication)

    

    package cn.china3y.pyg;
    
    @RestController
    public class QueueController {
    @Autowired
    private JmsTemplate jmsTemplate;

    @RequestMapping("send")
    public void smsSend() {
        Map map = new HashMap<>();
        map.put("phone", "***");
        map.put("code", "18122");
        map.put("code_time", "5");
        jmsTemplate.convertAndSend("sms", map);
    }


    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

你可能感兴趣的:(使用activemq接受监听并完成短信的发送 ---腾讯云短信)