日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringCloud集成发送短信--容联云通讯--Redis

發布時間:2024/1/18 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringCloud集成发送短信--容联云通讯--Redis 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SpringCloud集成–容聯云通訊–Redis

發送短信微服務

項目結構

配置文件

  • pom.xml

    <?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.service</groupId><artifactId>ly-sms</artifactId><dependencies><!-- 容聯云通訊, 發送短信的依賴 自帶的是gson2.8.5但是會報錯--><dependency><groupId>com.cloopen</groupId><artifactId>java-sms-sdk</artifactId><version>1.0.1</version></dependency><!-- 必須添加2.8.6, 要不然發送短信就會報錯 --><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.6</version></dependency><!-- spring操作rabbitmq依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><!-- 測試依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!-- spring操作redis依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency></dependencies></project>
  • application.yml

    server:port: 8086spring:application:name: sms-servicerabbitmq:host: 192.168.79.128 # 安裝rabbitmq的ipusername: leyou # rabbitmq的賬號password: 123456 # rabbitmq的密碼virtual-host: /leyou # 虛擬主機redis:host: 192.168.79.128 # 端口默認6379, 所以這里沒配置ly:sms:# 主賬號,登陸云通訊網站后,可在控制臺首頁看到開發者主賬號ACCOUNT SID和主賬號令牌AUTH TOKENaccountSId: ***********************accountToken: ***********************# 請使用管理控制臺中已創建應用的APPIDappId: ***********************# 短信模板templateId: 1
  • 啟動類

  • LySmsApplication

    package com.leyou.sms;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @program: leyou* @description:* @author: Mr.Xiao* @create: 2020-07-01 11:12**/ @SpringBootApplication public class LySmsApplication {public static void main(String[] args) {SpringApplication.run(LySmsApplication.class);}}
  • config

  • SmsProperties

    package com.leyou.sms.config;import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties;/*** @program: leyou* @description: java配置類* @author: Mr.Xiao* @create: 2020-07-01 11:24**/ @ConfigurationProperties(prefix = "ly.sms") @Data public class SmsProperties {private String accountSId;private String accountToken;private String appId;private String templateId;}
  • mq

  • SmsListener

    package com.leyou.sms.mq;import com.leyou.sms.config.SmsProperties; import com.leyou.sms.utils.SmsUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.amqp.core.ExchangeTypes; import org.springframework.amqp.rabbit.annotation.Exchange; import org.springframework.amqp.rabbit.annotation.Queue; import org.springframework.amqp.rabbit.annotation.QueueBinding; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils;import java.util.Map;/*** @program: leyou* @description: 消息接收處理* @author: Mr.Xiao* @create: 2020-06-29 18:21**/ @Component @EnableConfigurationProperties(SmsProperties.class) public class SmsListener {@Autowiredprivate SmsUtils smsUtils;@Autowiredprivate SmsProperties prop;@RabbitListener(bindings = @QueueBinding(/*** name = "sms.verify.code.queue" 隊列名稱* durable = "true" 持久化**/value = @Queue(name = "sms.verify.code.queue", durable = "true"),/*** name = "ly.sms.exchange" 交換機名稱* type = ExchangeTypes.TOPIC 交換機類型**/exchange = @Exchange(name = "ly.sms.exchange", type = ExchangeTypes.TOPIC),/*** key = "sms.verify.code" routing key**/key = "sms.verify.code"))public void listenerSendSms(Map<String, String> msg) {if (CollectionUtils.isEmpty(msg)) {return;}String to = msg.get("phone");if (StringUtils.isBlank(to)) {return;}String[] datas = msg.get("datas").split(",");// 發送短信驗證碼smsUtils.sendSms(to, prop.getTemplateId(), datas);}}
  • utils

  • SmsUtils

    package com.leyou.sms.utils;import com.cloopen.rest.sdk.BodyType; import com.cloopen.rest.sdk.CCPRestSmsSDK; import com.leyou.sms.config.SmsProperties; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component;import java.util.HashMap; import java.util.Set; import java.util.concurrent.TimeUnit;/*** @program: leyou* @description: 發送短息* @author: Mr.Xiao* @create: 2020-07-01 11:27**/ @Slf4j @Component @EnableConfigurationProperties(SmsProperties.class) public class SmsUtils {@Autowiredprivate SmsProperties prop; // java配置類, 把發送短信需要的配置, 都配置在配置文件了@Autowiredprivate StringRedisTemplate redisTemplate; // 注入redisTemplate// 生產環境請求地址:app.cloopen.comprivate static final String serverIp = "app.cloopen.com";// 請求端口private static final String serverPort = "8883";// 存入redis的前綴private static final String KEY_PREFIX = "sms:phone:";// 存活時間 1分鐘private static final long SMS_MIN_INTERVAL_IN_MILLIS = 60000;public void sendSms(String to, String templateId, String[] datas) {String redisKey = KEY_PREFIX + to;// TODO 按照手機號限流// 先從redis中取出該值String redisValue = redisTemplate.opsForValue().get(redisKey);if (StringUtils.isNotBlank(redisValue)) {// redis中有值long lastTime = Long.valueOf(redisValue);if (System.currentTimeMillis() - lastTime < SMS_MIN_INTERVAL_IN_MILLIS) {log.info("[短信服務], 發送頻率過高, 被攔截, 請稍后再試, 手機號碼: {}", to);return;}}CCPRestSmsSDK sdk = new CCPRestSmsSDK();sdk.init(serverIp, serverPort);sdk.setAccount(prop.getAccountSId(), prop.getAccountToken());sdk.setAppId(prop.getAppId());sdk.setBodyType(BodyType.Type_JSON);/*** to: 發送短信至手機號** templateId: 短信模板** datas: 這里模擬一下驗證碼123456,10分鐘內到期 {"123456", "10"}*/HashMap<String, Object> result = sdk.sendTemplateSMS(to,templateId,datas);if("000000".equals(result.get("statusCode"))){//正常返回輸出data包體信息(map)HashMap<String,Object> data = (HashMap<String, Object>) result.get("data");Set<String> keySet = data.keySet();for(String key:keySet){Object object = data.get(key);System.out.println(key +" = "+object);}// 發送短信成功后, 寫入redis, 指定生存時間1分鐘redisTemplate.opsForValue().set(redisKey, String.valueOf(System.currentTimeMillis()), 1, TimeUnit.MINUTES);log.info("[短信服務], 發送短信驗證碼, 手機號: {}", to);}else{log.error("[短信服務] 發送短信失敗 ", result.get("statusMsg"));//異常返回輸出錯誤碼和錯誤信息System.out.println("錯誤碼=" + result.get("statusCode") +" 錯誤信息= "+result.get("statusMsg"));}}}
  • 測試

  • test

    package com.leyou.test;import com.leyou.sms.LySmsApplication; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.amqp.core.AmqpTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner;import java.util.HashMap;/*** @program: leyou* @description:* @author: Mr.Xiao* @create: 2020-07-01 14:03**/ @RunWith(SpringRunner.class) @SpringBootTest(classes = LySmsApplication.class) public class test {@Autowiredprivate AmqpTemplate amqpTemplate;@Testpublic void sendSms() {HashMap<String, String> map = new HashMap<>();map.put("phone", "*********");map.put("datas", "123456,1");this.amqpTemplate.convertAndSend("ly.sms.exchange", "sms.verify.code", map);}}
  • 總結

    以上是生活随笔為你收集整理的SpringCloud集成发送短信--容联云通讯--Redis的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。