日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

聊聊如何在Java應用中發送短信

來源: 責編: 時間:2023-11-08 17:04:12 359觀看
導讀很多業務場景里,我們都需要發送短信,比如登陸驗證碼、告警、營銷通知、節日祝福等等。這篇文章,我們聊聊 Java 應用中如何優雅的發送短信。圖片一客戶端/服務端兩種模式Java 應用中發送短信通常需要使用短信服務提供商提

很多業務場景里,我們都需要發送短信,比如登陸驗證碼、告警、營銷通知、節日祝福等等。vo428資訊網——每日最新資訊28at.com

這篇文章,我們聊聊 Java 應用中如何優雅的發送短信。vo428資訊網——每日最新資訊28at.com

圖片圖片vo428資訊網——每日最新資訊28at.com

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

Java 應用中發送短信通常需要使用短信服務提供商提供的短信 API 。vo428資訊網——每日最新資訊28at.com

我們經常使用的短信渠道有:阿里云、騰訊云、華為云、億美等。vo428資訊網——每日最新資訊28at.com

發送短信模式分為兩種:vo428資訊網——每日最新資訊28at.com

1、客戶端模式

客戶端模式是指應用系統直接調用短信服務提供商提供的短信 API 發送短信。vo428資訊網——每日最新資訊28at.com

圖片圖片vo428資訊網——每日最新資訊28at.com

2、服務端模式

服務端模式是獨立創建一個短信平臺服務,應用系統直接使用短信平臺服務提供的 SDK 發送短信。vo428資訊網——每日最新資訊28at.com

圖片圖片vo428資訊網——每日最新資訊28at.com

核心流程如下:vo428資訊網——每日最新資訊28at.com

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

二客戶端模式

1、使用三方短信渠道 SDK

客戶端模式是非常簡單的模式,很多短信服務提供商會提供成熟的 SDK ,業務系統只需要添加 SDK 依賴以及相關配置,就可以調用 SDK 提供的方法發送短信。vo428資訊網——每日最新資訊28at.com

我們以阿里云短信服務為例, 調用 API 發送短信的全流程如下所示:vo428資訊網——每日最新資訊28at.com

圖片圖片vo428資訊網——每日最新資訊28at.com

使用 SDK 示例如下:vo428資訊網——每日最新資訊28at.com

圖片圖片vo428資訊網——每日最新資訊28at.com

國內云廠商阿里云、騰訊云、華為云的短信服務,都需要依次申請簽名,申請模版,審核通過之后才能發送短信。vo428資訊網——每日最新資訊28at.com

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

雖然使用三方短信渠道 SDK 非常簡單,但是在實際項目中,可能會存在多個三方渠道,也就是說:可能有的短信是通過騰訊云發送,有的是通過阿里云發送。這樣就需要在工程中配置不同渠道的 SDK 依賴。vo428資訊網——每日最新資訊28at.com

但這種方式會有兩個明顯的問題 :vo428資訊網——每日最新資訊28at.com

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

為了解決這個問題,有一種方法是擯棄三方渠道 SDK ,自己實現 SDK 的發送短信方法,這樣可以統一發送短信代碼,易于管理。vo428資訊網——每日最新資訊28at.com

筆者發現一個開源項目 SMS4J,該項目為短信聚合框架,旨在集成多家短信服務,解決接入多個短信 SDK 的繁瑣流程。vo428資訊網——每日最新資訊28at.com

下面我們展示在 SpringBoot 環境如何集成。vo428資訊網——每日最新資訊28at.com

  • 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 用于發送固定模板短信使用      templateId: SMS_215125134      #模板變量 上述模板的變量      templateName: code      #請求地址 默認為dysmsapi.aliyuncs.com 如無特殊改變可以不用設置      requestUrl: dysmsapi.aliyuncs.com   huawei:      #華為短信appKey      appKey: 5N6fvXXXX920HaWhVXXXXXX7fYa      #華為短信appSecret      app-secret: Wujt7EYzZTBXXXXXXEhSP6XXXX      #短信簽名      signature: 華為短信測試      #通道號      sender: 8823040504797      #模板ID 如果使用自定義模板發送方法可不設定      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 {  // 測試發送固定模板短信  @RequestMapping("/")  public void doLogin(String username, String password) {     //阿里云向此手機號發送短信     SmsFactory.createSmsBlend(SupplierType.ALIBABA).                       sendMessage("18888888888","123456");     //華為短信向此手機號發送短信     SmsFactory.createSmsBlend(SupplierType.HUAWEI).                       sendMessage("16666666666","000000");  }}

客戶端模式是簡單實用的模式,我們可以直接引入三方渠道的 SDK 發送短信,但當存在多種渠道短信時,可能代碼會比較混亂。vo428資訊網——每日最新資訊28at.com

雖然我們可以封裝多個三方渠道接口來解決問題,但研發成本還是比較高的。vo428資訊網——每日最新資訊28at.com

另外,當研發小組分散,發送短信各自自成體系時,當某一個渠道由于某種原因被棄用時,大部分研發小組都可能會受影響。vo428資訊網——每日最新資訊28at.com

三服務端模式

服務端模式是獨立創建一個短信平臺服務,應用服務直接使用短信平臺提供的 SDK 發送短信。vo428資訊網——每日最新資訊28at.com

短信平臺的設計有如下要點:vo428資訊網——每日最新資訊28at.com

1、應用管理

短信平臺為每一個接入的應用分配單獨的 appKey 和 appSecret ,每一個應用可以配置獨立的限流策略。vo428資訊網——每日最新資訊28at.com

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

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

3、簽名、模版管理

每個應用服務涉及到的簽名、模版的管理都中心化 ,我們可以讓一個模板綁定多個渠道。vo428資訊網——每日最新資訊28at.com

當某條短信通過渠道 A 發送失敗時,可以通過另一個渠道 B 發送,如此可以達到高可用的效果。vo428資訊網——每日最新資訊28at.com

4、多渠道適配

服務端要加載多個渠道的 SDK ,那么可能導致依賴沖突,可以采取 SPI 機制加載渠道插件。vo428資訊網——每日最新資訊28at.com

5、擴展功能

我們可以根據業務需求靈活定制短信平臺的功能,比如批量發送、延遲發送、路由策略、靈活的接口限流等。vo428資訊網——每日最新資訊28at.com

服務端的設計可以非常靈活,筆者曾經重構過一個短信平臺服務,架構圖如下:vo428資訊網——每日最新資訊28at.com

圖片圖片vo428資訊網——每日最新資訊28at.com

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

本文鏈接:http://www.www897cc.com/showinfo-26-17799-0.html聊聊如何在Java應用中發送短信

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Python 既是解釋型語言,也是編譯型語言

下一篇: OpenHashTab:確保數據完整性和安全性的秘密武器

標簽:
  • 熱門焦點
  • 一加Ace2 Pro真機揭曉 鈦空灰配色質感拉滿

    終于,在經過了幾波預熱之后,一加Ace2 Pro的外觀真機圖在網上出現了。還是博主數碼閑聊站曝光的,這次的外觀設計還是延續了一加11的方案,只是細節上有了調整,例如新加入了鈦空灰
  • 小米降噪藍牙耳機Necklace分享:聽一首歌 讀懂一個故事

    在今天下午的小米Civi 2新品發布會上,小米還帶來了一款新的降噪藍牙耳機Necklace,我們也在發布結束的第一時間給大家帶來這款耳機的簡單分享?,F在大家能見到最多的藍牙耳機
  • 企業采用CRM系統的11個好處

    客戶關系管理(CRM)軟件可以為企業提供很多的好處,從客戶保留到提高生產力?! RM軟件用于企業收集客戶互動,以改善客戶體驗和滿意度。  CRM軟件市場規模如今超過580
  • JVM優化:實戰OutOfMemoryError異常

    一、Java堆溢出堆內存中主要存放對象、數組等,只要不斷地創建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過
  • 消費結構調整丨巨頭低價博弈,拼多多還卷得動嗎?

    來源:征探財經作者:陳香羽隨著流量紅利的退潮,電商的存量博弈越來越明顯。曾經主攻中高端與品質的淘寶天貓、京東重拾&ldquo;低價&rdquo;口號。而過去與他們錯位競爭的拼多多,靠
  • 小米汽車電池信息疑似曝光:容量101kWh,支持800V高壓快充

    7月14日消息,今日一名博主在社交媒體發布了一張疑似小米汽車電池信息的照片,顯示該電池包正是寧德時代麒麟電池,容量為101kWh,電壓為726.7V,可以預測小
  • 滴滴違法違規被罰80.26億 共存在16項違法事實

    滴滴違法違規被罰80.26億 存在16項違法事實開始于2121年7月,歷經一年時間,網絡安全審查辦公室對“滴滴出行”網絡安全審查終于有了一個暫時的結束。據“網信
  • Windows 11發布,微軟一改往常對老機型開放的態度

    距離 Windows 11 發布已經過去一周,在過去一周里,很多數碼愛好者圍繞其對 Android 應用的支持、對老機型的升級問題展開了激烈討論。與以往不同的是,在這次大
  • 蘋果MacBook Pro 2021測試:仍不支持平滑滾動

    據10月30日9to5 Mac 消息報道,蘋果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯的評價,亮點包括行業領先的性能,令人印象深刻的電池續航,精美豐
Top 主站蜘蛛池模板: 绵阳市| 莫力| 庄河市| 苏尼特右旗| 宣化县| 泰来县| 莱州市| 上栗县| 宿松县| 论坛| 赫章县| 许昌市| 新密市| 乌什县| 德化县| 大同县| 湘阴县| 临城县| 平和县| 博兴县| 和政县| 海安县| 明溪县| 罗江县| 麻栗坡县| 九台市| 灵丘县| 江孜县| 湘阴县| 密山市| 江城| 乌鲁木齐县| 诸城市| 罗城| 黄龙县| 卢氏县| 昂仁县| 昆山市| 葵青区| 浮山县| 永春县|