亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺析如何在Java應用中優(yōu)雅的發(fā)送短信

 更新時間:2023年11月09日 08:51:08   作者:勇哥java實戰(zhàn)分享  
很多業(yè)務場景里,我們都需要發(fā)送短信,比如登陸驗證碼、告警、營銷通知、節(jié)日祝福等等,這篇文章,我們聊聊 Java 應用中如何優(yōu)雅的發(fā)送短信,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下

這篇文章,我們聊聊 Java 應用中如何優(yōu)雅的發(fā)送短信。

1 客戶端/服務端兩種模式

Java 應用中發(fā)送短信通常需要使用短信服務提供商提供的短信 API 。

我們經(jīng)常使用的短信渠道有:阿里云、騰訊云、華為云億美等。

發(fā)送短信模式分為兩種:

1、客戶端模式

客戶端模式是指應用系統(tǒng)直接調用短信服務提供商提供的短信 API 發(fā)送短信。

2、服務端模式

服務端模式是獨立創(chuàng)建一個短信平臺服務,應用系統(tǒng)直接使用短信平臺服務提供的 SDK 發(fā)送短信。

核心流程如下:

  • 前端調用應用服務接口發(fā)送短信 ;
  • 應用服務收到短信請求后,調用 SDK 方法根據(jù)模版發(fā)送短信;
  • 短信平臺服務收到請求,根據(jù)路由算法選擇配置的渠道(比如阿里云、騰訊云)發(fā)送短信;
  • 短信成功發(fā)送到用戶手機 。

2 客戶端模式

1、使用三方短信渠道 SDK

客戶端模式是非常簡單的模式,很多短信服務提供商會提供成熟的 SDK ,業(yè)務系統(tǒng)只需要添加 SDK 依賴以及相關配置,就可以調用 SDK 提供的方法發(fā)送短信。

我們以阿里云短信服務為例, 調用 API 發(fā)送短信的全流程如下所示:

使用 SDK 示例如下:

國內云廠商阿里云、騰訊云、華為云的短信服務,都需要依次申請簽名,申請模版,審核通過之后才能發(fā)送短信。

2、封裝多個三方渠道接口

雖然使用三方短信渠道 SDK 非常簡單,但是在實際項目中,可能會存在多個三方渠道,也就是說:可能有的短信是通過騰訊云發(fā)送,有的是通過阿里云發(fā)送。 這樣就需要在工程中配置不同渠道的 SDK 依賴。

但這種方式會有兩個明顯的問題 :

  • 不同渠道的發(fā)送短信代碼不一致,業(yè)務代碼偏混亂。
  • 工程中引入到 SDK 包比較多,不同的 SDK 依賴并不相同,可能存在沖突問題 。

為了解決這個問題,有一種方法是擯棄三方渠道 SDK ,自己實現(xiàn) SDK 的發(fā)送短信方法,這樣可以統(tǒng)一發(fā)送短信代碼,易于管理。

筆者發(fā)現(xiàn)一個開源項目 SMS4J,該項目為短信聚合框架,旨在集成多家短信服務,解決接入多個短信 SDK 的繁瑣流程。

下面我們展示在 SpringBoot 環(huán)境如何集成。

  • maven 引入
<dependency>
 <groupId>org.dromara.sms4j</groupId>
 <artifactId>sms4j-spring-boot-starter</artifactId>
 <version>3.0.2</version>
</dependency>
  • 設置配置文件
sms:
   alibaba:
      #阿里云的accessKey
      accessKeyId: 您的accessKey
      #阿里云的accessKeySecret
      accessKeySecret: 您的accessKeySecret
      #短信簽名
      signature: 測試簽名
      #模板ID 用于發(fā)送固定模板短信使用
      templateId: SMS_215125134
      #模板變量 上述模板的變量
      templateName: code
      #請求地址 默認為dysmsapi.aliyuncs.com 如無特殊改變可以不用設置
      requestUrl: dysmsapi.aliyuncs.com
   huawei:
      #華為短信appKey
      appKey: 5N6fvXXXX920HaWhVXXXXXX7fYa
      #華為短信appSecret
      app-secret: Wujt7EYzZTBXXXXXXEhSP6XXXX
      #短信簽名
      signature: 華為短信測試
      #通道號
      sender: 8823040504797
      #模板ID 如果使用自定義模板發(fā)送方法可不設定
      template-id: acXXXXXXXXc274b2a8263479b954c1ab5
      #華為回調地址,如不需要可不設置或為空
      statusCallBack:
      #華為分配的app請求地址
      url: https://XXXXX.cn-north-4.XXXXXXXX.com:443
   zhutong:
      #助通短信
      #助通終端用戶管理的用戶名 username 必填;非登錄賬號密碼,請登錄后臺管理地址進行查看:http://mix2.zthysms.com/login
      accessKeyId: tushu1122XXX
      #助通終端用戶管理的用戶名 passwrod 必填;
      accessKeySecret: UbXXX4SL
      #短信簽名,可選;可選的時候,只能使用自定義短信不能使用模板短信; 具體在這里查看審核過的短信簽名:https://mix2.zthysms.com/index.html#/SignatureManagement
      signature: 上海千XXXX
  • 方法使用
@RestController
@RequestMapping("/test/")
public class DemoController {
  // 測試發(fā)送固定模板短信
  @RequestMapping("/")
  public void doLogin(String username, String password) {
     //阿里云向此手機號發(fā)送短信
     SmsFactory.createSmsBlend(SupplierType.ALIBABA).
                       sendMessage("18888888888","123456");
     //華為短信向此手機號發(fā)送短信
     SmsFactory.createSmsBlend(SupplierType.HUAWEI).
                       sendMessage("16666666666","000000");
  }
}

客戶端模式是簡單實用的模式,我們可以直接引入三方渠道的 SDK 發(fā)送短信,但當存在多種渠道短信時,可能代碼會比較混亂。

雖然我們可以封裝多個三方渠道接口來解決問題,但研發(fā)成本還是比較高的。

另外,當研發(fā)小組分散,發(fā)送短信各自自成體系時,當某一個渠道由于某種原因被棄用時,大部分研發(fā)小組都可能會受影響。

3 服務端模式

服務端模式是獨立創(chuàng)建一個短信平臺服務,應用服務直接使用短信平臺提供的 SDK 發(fā)送短信。

短信平臺的設計有如下要點:

1、應用管理

短信平臺為每一個接入的應用分配單獨的 appKeyappSecret ,每一個應用可以配置獨立的限流策略。

2、精簡的 SDK 提供按照模版單發(fā)/群發(fā)的功能

public SmsSenderResult sendSmsByTemplateId( 
                    String mobile, 
                    String templateId, 
                    Map<String, String> templateParam);

3、簽名、模版管理

每個應用服務涉及到的簽名、模版的管理都中心化 ,我們可以讓一個模板綁定多個渠道。

當某條短信通過渠道 A 發(fā)送失敗時,可以通過另一個渠道 B 發(fā)送,如此可以達到高可用的效果。

4、多渠道適配

服務端要加載多個渠道的 SDK ,那么可能導致依賴沖突,可以采取 SPI 機加載渠道插件。

筆者曾經(jīng)重構過一個短信平臺服務,架構圖如下:

  • 模仿騰訊云的 SDK 設計,提供簡單易用的短信接口;
  • 設計短信服務 API 端,接收發(fā)短信請求,發(fā)送短信信息到消息隊列;
  • worker 服務消費消息,按照負載均衡的算法,調用不同渠道商的短信接口;
  • Dashboard 可以查看短信發(fā)送記錄,配置渠道商信息。

以上就是淺析如何在Java應用中優(yōu)雅的發(fā)送短信的詳細內容,更多關于Java應用中發(fā)送短信的資料請關注腳本之家其它相關文章!

相關文章

  • JAVA中String類與StringBuffer類的區(qū)別

    JAVA中String類與StringBuffer類的區(qū)別

    這篇文章主要為大家詳細介紹了JAVA中String類與StringBuffer類的區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • SpringBoot中使用spring-retry 解決失敗重試調用

    SpringBoot中使用spring-retry 解決失敗重試調用

    本文主要介紹了SpringBoot中使用spring-retry 解決失敗重試調用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • 淺談Java設計模式系列-裝飾器模式

    淺談Java設計模式系列-裝飾器模式

    這篇文章主要介紹了Java設計模式系列-裝飾器模式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • java中的轉義字符介紹

    java中的轉義字符介紹

    普通的轉義字符序列和八進制轉義字符都比Unicode轉義字符要好得多,因為與Unicode轉義字符不同,轉義字符序列是在程序被解析為各種符號之后被處理的
    2013-09-09
  • JDK1.7 Paths,Files類實現(xiàn)文件夾的復制與刪除的實例

    JDK1.7 Paths,Files類實現(xiàn)文件夾的復制與刪除的實例

    下面小編就為大家分享一篇JDK1.7 Paths,Files類實現(xiàn)文件夾的復制與刪除的實例,具有很好的參考價值,希望對大家有所幫助。以前跟隨小編過來看看吧
    2017-11-11
  • 解決子線程無法訪問父線程中通過ThreadLocal設置的變量問題

    解決子線程無法訪問父線程中通過ThreadLocal設置的變量問題

    這篇文章主要介紹了解決子線程無法訪問父線程中通過ThreadLocal設置的變量問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 關于Java實現(xiàn)word(docx、doc)轉html的完美解決方案

    關于Java實現(xiàn)word(docx、doc)轉html的完美解決方案

    文章介紹了多種將Word文檔轉換為HTML的方法,包括使用Microsoft Word自帶的導出功能、第三方工具和編程實現(xiàn),展示了如何實現(xiàn)將.docx文件轉換為HTML文件,并自動生成目錄、處理分頁符和增強表格樣式等功能,感興趣的朋友一起看看吧
    2025-01-01
  • SpringCloud Gateway跨域配置代碼實例

    SpringCloud Gateway跨域配置代碼實例

    這篇文章主要介紹了SpringCloud Gateway跨域配置代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • SpringBoot MockMvc單元測試的示例代碼

    SpringBoot MockMvc單元測試的示例代碼

    這篇文章主要介紹了SpringBoot MockMvc單元測試的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Springboot+AOP實現(xiàn)返回數(shù)據(jù)提示語國際化的示例代碼

    Springboot+AOP實現(xiàn)返回數(shù)據(jù)提示語國際化的示例代碼

    這篇文章主要介紹了Springboot+AOP實現(xiàn)返回數(shù)據(jù)提示語國際化的示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07

最新評論