黑馬程序員十次方微服務項目開發實踐,利用阿里雲短信微服務搭建發送短信微服務(十四)

一、工程搭建

(1)創建工程模塊:tensquare_sms,pom.xml引入依賴

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
    </dependencies>

(2)創建application.yml

server:
  port: 9009
spring:
  application:
    name: tensquare-sms #指定服務名
  rabbitmq:
    host: 192.168.192.130

(3)com.tensquare.sms 包下創建啓動類


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

二、消息監聽類

(1)創建短信監聽類,獲取手機號和驗證碼

/**
 * 短信監聽類
 */
@Component
@RabbitListener(queues = "sms")
public class SmsListener {
    /**
     * 發送短信
     * @param message
     */
    @RabbitHandler
    public void sendSms(Map<String,String> message){
        System.out.println("手機號:"+message.get("mobile"));
        System.out.println("驗證碼:"+message.get("code"));
    }
}

(2)運行SmsApplication類,控制檯顯示手機號和驗證碼

三、發送短信

  1. 阿里雲通信簡介
    阿里雲通信(原名–阿里大於)是 阿里雲旗下產品,融合了三大運營商的通信能
    力,通過將傳統通信業務和能力與互聯網相結合,創新融合阿里巴巴生態內容,全力爲
    中小企業和開發者提供優質服務阿里大於提供包括短信、語音、流量直充、私密專線、
    店鋪手機號等個性化服務。通過阿里大於打通三大運營商通信能力,全面融合阿里巴巴
    生態,以開放 API 及 SDK 的方式向開發者提供通信和數據服務,更好地支撐企業業務發
    展和創新服務。
  2. 準備工作
    (1)在阿里雲官網 www.alidayu.com 註冊賬號
    (2)手機下載”阿里雲“APP,完成實名認證
    (3)登陸阿里雲,產品中選擇”短信服務“
    (4)申請簽名(需要審覈時間)
    (5)申請模板(需要審覈時間)
    (6)創建 accessKey (注意保密!)
    (7)充值 (沒必要充太多,一條短信0.045,所以1至2元足矣,土豪請隨意~)
  3. 代碼編寫
    (1)pom.xml引入依賴
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>3.2.5</version>
        </dependency>

(2)修改application.yml ,增加配置

aliyun:
  sms:
    accessKeyId: 替換成自己的
    accessKeySecret: 替換成自己的
    template_code: 替換成自己申請的
    sign_name: 替換成自己申請的

(3)創建短信工具類SmsUtil

/**
 * 短信工具類
 * @author Administrator
 *
 */
@Component
public class SmsUtil {

    //產品名稱:雲通信短信API產品,開發者無需替換
    static final String product = "Dysmsapi";
    //產品域名,開發者無需替換
    static final String domain = "dysmsapi.aliyuncs.com";

    @Autowired
    private 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("aliyun.sms.accessKeyId");
        String accessKeySecret = env.getProperty("aliyun.sms.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;
    }

    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天內記錄查詢,格式yyyyMMdd
        SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");
        request.setSendDate(ft.format(new Date()));
        //必填-頁大小
        request.setPageSize(10L);
        //必填-當前頁碼從1開始計數
        request.setCurrentPage(1L);
        //hint 此處可能會拋出異常,注意catch
        QuerySendDetailsResponse querySendDetailsResponse = acsClient.getAcsResponse(request);
        return querySendDetailsResponse;
    }
}

(4)修改消息監聽類,完成短信發送

/**
 * 短信監聽類
 */
@Component
@RabbitListener(queues = "sms")
public class SmsListener {
    @Autowired
    private SmsUtil smsUtil;
    @Value("${aliyun.sms.template_code}")
    private String template_code;//模板編號
    @Value("${aliyun.sms.sign_name}")
    private String sign_name;//簽名
    @RabbitHandler
    public void sendSms(Map<String,String> map){
        System.out.println("手機號:"+map.get("mobile"));
        System.out.println("驗證碼:"+map.get("code"));
        try {
            smsUtil.sendSms(map.get("mobile"),template_code,sign_name,"{\"number\":\""+ map.get("code") +"\"}");
            } catch (ClientException e) {
                e.printStackTrace();
            }
        }
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章