0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Java應(yīng)中如何發(fā)送短信

OSC開源社區(qū) ? 來源:OSC開源社區(qū) ? 2023-11-09 10:46 ? 次閱讀

很多業(yè)務(wù)場景里,我們都需要發(fā)送短信,比如登陸驗(yàn)證碼、告警、營銷通知、節(jié)日祝福等等。

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

dc9e41ae-7ea8-11ee-939d-92fbcf53809c.png

1 客戶端/服務(wù)端兩種模式

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

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

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

1、客戶端模式

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

dcc042a4-7ea8-11ee-939d-92fbcf53809c.png

2、服務(wù)端模式

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

dcd5d966-7ea8-11ee-939d-92fbcf53809c.png

核心流程如下:

前端調(diào)用應(yīng)用服務(wù)接口發(fā)送短信 ;

應(yīng)用服務(wù)收到短信請(qǐng)求后,調(diào)用 SDK 方法根據(jù)模版發(fā)送短信;

短信平臺(tái)服務(wù)收到請(qǐng)求,根據(jù)路由算法選擇配置的渠道(比如阿里云、騰訊云)發(fā)送短信;

短信成功發(fā)送到用戶手機(jī)

2 客戶端模式

1、使用三方短信渠道 SDK

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

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

dcee7778-7ea8-11ee-939d-92fbcf53809c.png

使用 SDK 示例如下:

dd040eb2-7ea8-11ee-939d-92fbcf53809c.png

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

2、封裝多個(gè)三方渠道接口

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

但這種方式會(huì)有兩個(gè)明顯的問題 :

不同渠道的發(fā)送短信代碼不一致,業(yè)務(wù)代碼偏混亂。

工程中引入到 SDK 包比較多,不同的 SDK 依賴并不相同,可能存在沖突問題 。

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

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

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

maven 引入


org.dromara.sms4j
sms4j-spring-boot-starter
3.0.2

設(shè)置配置文件

sms:

alibaba:
#阿里云的accessKey
accessKeyId:您的accessKey
#阿里云的accessKeySecret
accessKeySecret:您的accessKeySecret
#短信簽名
signature:測試簽名
#模板ID用于發(fā)送固定模板短信使用
templateId:SMS_215125134
#模板變量上述模板的變量
templateName:code
#請(qǐng)求地址默認(rèn)為dysmsapi.aliyuncs.com如無特殊改變可以不用設(shè)置
requestUrl:dysmsapi.aliyuncs.com
huawei:
#華為短信appKey
appKey:5N6fvXXXX920HaWhVXXXXXX7fYa
#華為短信appSecret
app-secret:Wujt7EYzZTBXXXXXXEhSP6XXXX
#短信簽名
signature:華為短信測試
#通道號(hào)
sender:8823040504797
#模板ID如果使用自定義模板發(fā)送方法可不設(shè)定
template-id:acXXXXXXXXc274b2a8263479b954c1ab5
#華為回調(diào)地址,如不需要可不設(shè)置或?yàn)榭?statusCallBack:
#華為分配的app請(qǐng)求地址
url:https://XXXXX.cn-north-4.XXXXXXXX.com:443
zhutong:
#助通短信
#助通終端用戶管理的用戶名 username 必填;非登錄賬號(hào)密碼,請(qǐng)登錄后臺(tái)管理地址進(jìn)行查看:http://mix2.zthysms.com/login
accessKeyId:tushu1122XXX
#助通終端用戶管理的用戶名 passwrod 必填;
accessKeySecret:UbXXX4SL
#短信簽名,可選;可選的時(shí)候,只能使用自定義短信不能使用模板短信;具體在這里查看審核過的短信簽名:https://mix2.zthysms.com/index.html#/SignatureManagement
signature:上海千XXXX

方法使用

@RestController
@RequestMapping("/test/")
publicclassDemoController{
//測試發(fā)送固定模板短信
@RequestMapping("/")
publicvoiddoLogin(Stringusername,Stringpassword){
//阿里云向此手機(jī)號(hào)發(fā)送短信
SmsFactory.createSmsBlend(SupplierType.ALIBABA).
sendMessage("18888888888","123456");
//華為短信向此手機(jī)號(hào)發(fā)送短信
SmsFactory.createSmsBlend(SupplierType.HUAWEI).
sendMessage("16666666666","000000");
}
}

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

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

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

3 服務(wù)端模式

服務(wù)端模式是獨(dú)立創(chuàng)建一個(gè)短信平臺(tái)服務(wù),應(yīng)用服務(wù)直接使用短信平臺(tái)提供的 SDK 發(fā)送短信。

短信平臺(tái)的設(shè)計(jì)有如下要點(diǎn):

1、應(yīng)用管理

短信平臺(tái)為每一個(gè)接入的應(yīng)用分配單獨(dú)的 appKey 和 appSecret ,每一個(gè)應(yīng)用可以配置獨(dú)立的限流策略。

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

publicSmsSenderResultsendSmsByTemplateId(

Stringmobile,
StringtemplateId,
MaptemplateParam);

3、簽名、模版管理

每個(gè)應(yīng)用服務(wù)涉及到的簽名、模版的管理都中心化 ,我們可以讓一個(gè)模板綁定多個(gè)渠道。

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

4、多渠道適配

服務(wù)端要加載多個(gè)渠道的 SDK ,那么可能導(dǎo)致依賴沖突,可以采取 SPI 機(jī)制加載渠道插件。

5、擴(kuò)展功能

我們可以根據(jù)業(yè)務(wù)需求靈活定制短信平臺(tái)的功能,比如批量發(fā)送、延遲發(fā)送、路由策略、靈活的接口限流等。

服務(wù)端的設(shè)計(jì)可以非常靈活,筆者曾經(jīng)重構(gòu)過一個(gè)短信平臺(tái)服務(wù),架構(gòu)圖如下:

dd41ca22-7ea8-11ee-939d-92fbcf53809c.jpg

模仿騰訊云的 SDK 設(shè)計(jì),提供簡單易用的短信接口;

設(shè)計(jì)短信服務(wù) API 端,接收發(fā)短信請(qǐng)求,發(fā)送短信信息到消息隊(duì)列;

worker 服務(wù)消費(fèi)消息,按照負(fù)載均衡的算法,調(diào)用不同渠道商的短信接口;

Dashboard 可以配置渠道、管理應(yīng)用、查看短信發(fā)送記錄等。

編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4675

    瀏覽量

    94198
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2982

    瀏覽量

    106392
  • 客戶端
    +關(guān)注

    關(guān)注

    1

    文章

    296

    瀏覽量

    16918
  • SDK
    SDK
    +關(guān)注

    關(guān)注

    3

    文章

    1057

    瀏覽量

    47119
  • 服務(wù)端
    +關(guān)注

    關(guān)注

    0

    文章

    67

    瀏覽量

    7155

原文標(biāo)題:聊聊如何在Java應(yīng)用中發(fā)送短信

文章出處:【微信號(hào):OSC開源社區(qū),微信公眾號(hào):OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Java如何使用API來完成郵件的接收與發(fā)送

    的接收與發(fā)送。 通過該篇文章我們可以有如下收獲: 了解基于Java的電子郵件客戶端的實(shí)現(xiàn)方式 了解常見的郵箱如何集成 認(rèn)識(shí)郵箱的IMAP與POP協(xié)議 適用場景 郵件和短信很像,將信息
    的頭像 發(fā)表于 09-30 14:09 ?3800次閱讀
    在<b class='flag-5'>Java</b><b class='flag-5'>中</b>如何使用API來完成郵件的接收與<b class='flag-5'>發(fā)送</b>

    使用LabVIEW發(fā)送短信

    相關(guān)課程推薦:《8周LabVIEW視覺項(xiàng)目編程實(shí)戰(zhàn)特訓(xùn)營》現(xiàn)在使用的連接庫,您可以發(fā)送短信。這個(gè)庫,幫助你使用任何報(bào)警和事件條件的LabVIEW發(fā)送短信。2010版本:[hide] [
    發(fā)表于 03-15 10:52

    串口通信短信發(fā)送

    最近某省移動(dòng)公司中層領(lǐng)導(dǎo)有個(gè)需求:通過手機(jī)卡發(fā)送短信來實(shí)現(xiàn)和類似1065****、1069****等短信網(wǎng)關(guān)的下發(fā)短信速度。這類網(wǎng)關(guān)大概下發(fā)短信
    發(fā)表于 05-17 16:17

    AT命令發(fā)送不了短信

    使用AT命令發(fā)送PDU中文短信,為什么總是返回錯(cuò)誤?我是按照教程一步一步來的,為什么不行呢?但是我用text就可以發(fā)送英文短信
    發(fā)表于 05-15 17:05

    JAVA開發(fā)的短信收發(fā)程序

    JAVA開發(fā)的短信收發(fā)程序:Microsoft Visual Studio Solution File, Format Version 9.00# Visual Studio 2005Project
    發(fā)表于 02-08 17:21 ?28次下載

    酷博短信發(fā)送軟件

    酷博短信發(fā)送軟件支持各種短信Modem和Modem 池發(fā)送短信,適用于政府機(jī)關(guān)、企事業(yè)單位短信
    發(fā)表于 06-30 13:45 ?630次閱讀

    短信息群組發(fā)送

    短信息群組發(fā)送   短信息群發(fā)功能即可將一條信息同時(shí)發(fā)給多個(gè)用
    發(fā)表于 12-19 11:58 ?872次閱讀

    JAVA教程之組播組中發(fā)送和接受數(shù)據(jù)

    JAVA教程之組播組中發(fā)送和接受數(shù)據(jù),很好的JAVA的資料,快來學(xué)習(xí)吧
    發(fā)表于 04-11 17:28 ?5次下載

    sim900a中英文短信發(fā)送步驟

    sim900a中英文短信發(fā)送步驟介紹。
    發(fā)表于 11-06 11:57 ?1.7w次閱讀
    sim900a中英文<b class='flag-5'>短信</b><b class='flag-5'>發(fā)送</b>步驟

    一種基于JAVA的多業(yè)務(wù)綜合短信平臺(tái)設(shè)計(jì)

    傳統(tǒng)的短信功能已無法滿足電力行業(yè)生產(chǎn)類短信的特殊要求,針對(duì)這種情況,提出了一種基于JAVA的多業(yè)務(wù)綜合短信平臺(tái)設(shè)計(jì)方案,將國電大渡河流域梯級(jí)電站集控中心各生產(chǎn)系統(tǒng)的
    發(fā)表于 11-16 10:32 ?9次下載
    一種基于<b class='flag-5'>JAVA</b>的多業(yè)務(wù)綜合<b class='flag-5'>短信</b>平臺(tái)設(shè)計(jì)

    使用51單片機(jī)發(fā)送短信的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)發(fā)送短信的程序免費(fèi)下載。
    發(fā)表于 08-28 17:29 ?11次下載
    使用51單片機(jī)<b class='flag-5'>發(fā)送</b><b class='flag-5'>短信</b>的程序免費(fèi)下載

    如何使用GPRS模塊發(fā)送短信詳細(xì)資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何使用GPRS模塊發(fā)送短信詳細(xì)資料說明包括了:pdu發(fā)短信問答,pdu格式發(fā)送短信息例子集,
    發(fā)表于 12-03 17:06 ?16次下載
    如何使用GPRS模塊<b class='flag-5'>發(fā)送</b><b class='flag-5'>短信</b>詳細(xì)資料說明

    COVID 19短信系統(tǒng),可在何時(shí)向您發(fā)送警報(bào)

    電子發(fā)燒友網(wǎng)站提供《COVID 19短信系統(tǒng),可在何時(shí)向您發(fā)送警報(bào).zip》資料免費(fèi)下載
    發(fā)表于 11-18 14:16 ?0次下載
    COVID 19<b class='flag-5'>短信</b>系統(tǒng),可在何時(shí)向您<b class='flag-5'>發(fā)送</b>警報(bào)

    我的警報(bào)和傳感器向我發(fā)送短信

    電子發(fā)燒友網(wǎng)站提供《我的警報(bào)和傳感器向我發(fā)送短信.zip》資料免費(fèi)下載
    發(fā)表于 11-28 10:17 ?0次下載
    我的警報(bào)和傳感器向我<b class='flag-5'>發(fā)送</b><b class='flag-5'>短信</b>

    Autojs多卡手機(jī)后臺(tái)靜默發(fā)送短信

    第三方應(yīng)用發(fā)送短信,需要授予短信權(quán)限.沒有權(quán)限的話. 沒法運(yùn)行本文中的代碼. 申請(qǐng)短信權(quán)限,包括怎么在AndroidManifast.xml文件
    的頭像 發(fā)表于 03-03 10:26 ?2705次閱讀

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品