程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java發送短信系列之同步、異步發送短信

java發送短信系列之同步、異步發送短信

編輯:關於JAVA

java發送短信系列之同步、異步發送短信。本站提示廣大學習愛好者:(java發送短信系列之同步、異步發送短信)文章只能為提供參考,不一定能成為您想要的結果。以下是java發送短信系列之同步、異步發送短信正文


本篇本章是發送短信的第一部門, 說一下同步/異步發送短信的代碼, 今後幾篇我們略微完美一下功效, 添加發送頻率的限制和日發送次數的限制.

發送短信的辦法能夠很多, 我們的辦法是應用辦事商供給的辦事. 普通來講, 這些辦事都是和說話有關的, 這裡我們應用java寫示例法式.
1、發送短信的接口
依據本身的情形選擇辦事商。
2、開辟文檔
從開辟文檔中我們可以看到. 可以直接應用http要求也能夠應用WebService要求發送短信. 因為DEMO文件夾下的java和jsp文件夾中的代碼都是應用http要求發送短信. 所以這裡就不再細說了, 我們應用WebService的方法演示發送短信.
3、生成客戶端代碼

從接口文檔中我們曉得它的WebService的WSDL的url為: http://106.ihuyi.cn/webservice/sms.php?WSDL 那末我們可以履行上面的敕令生成客戶端代碼:

wsimport -keep http://106.ihuyi.cn/webservice/sms.php?WSDL

個中wsimport是JDK自帶的對象, -keep url選項是"保存生成的文件". 該敕令會在以後目次下生成sms.cn.ihuyi._106包, 和浩瀚的類. 接上去開端編寫我們本身的代碼.

4、界說接口

為了便利, 這裡我們起首界說一個接口:

Sms.java

public interface Sms {
 /**
  * 向mobile發送短信, 內容為message
  * 
  * @param mobile 手機號
  * @param message 短信內容
  * @return 勝利前往-1, 不然前往其他值
  */
 int sendMessage(String mobile, String message);
}

這個接口很簡略, 只要一個辦法. 這個辦法用來發送短信.

5、同步發送短信

接上去我們起首完成一個同步發送短信的類:

IhuyiSmsImpl.java

public class IhuyiSmsImpl implements Sms {

 private String account;
 private String password;

 public void setAccount(String account) {
  this.account = account;
 }

 public void setPassword(String password) {
  this.password = password;
 }

 @Override
 public int sendMessage(String mobile, String message) {
  cn.ihuyi._106.Sms factory = new cn.ihuyi._106.Sms();
  SmsSoap smsSoap = factory.getSmsSoap();
  SubmitResult submit = smsSoap.submit(account, password, mobile, message);
  int code = submit.getCode();
  if(code == 2){
   return -1;
  }
  System.out.println("發送短信掉敗, code:" + code);
  return code;
 }
}

在第17行, 我們取得長途對象的一個署理對象. 以後便可以經由過程這個署理對象停止發送短信, 查詢賬戶余額等操作.

第18行, 應用該署理對象的submit辦法提交了短信內容. 該辦法的參數信息及前往值寄義在接口文檔中有具體的解釋.

第19行我們取得了卻果的狀況碼. 依據文檔上的解釋, 狀況碼為2解釋提交勝利. 簡略起見, 這裡我們只存眷提交勝利的情形. 須要留意的是, 狀況碼為2只是解釋提交勝利. 依據官網上的"3-5秒內呼應、100%達到", 我們可以推想. 假如提交勝利, 那末根本上3-5秒內,短信就會發送勝利, 依據用戶的收集情形, 能夠稍有延遲用戶便可以收到短信.

應用這段代碼發送短信也很簡略, 直接new一個對象, 設置好賬號和暗碼便可以發送短信了.

6、異步發送短信

因為發送短信觸及到收集通訊, 是以sendMessage辦法能夠會有一些延遲. 為了改良用戶體驗, 我們可使用異步發送短信的辦法. 道理很簡略: 假如用戶要求發送短信, 我們不是直接挪用IhuyiSmsImpl的sendMessage辦法, 而是將要求保留起來(臨盆者), 然後告知用戶: 短信發送勝利. 以後有若干個花費者掏出義務, 挪用sendMessage辦法發送短信.

這裡, 我應用線程池完成下面的義務:

AsyncSmsImpl.java

public class AsyncSmsImpl implements Sms {
 public Sms sendSms;
 private ExecutorService executorService = Executors.newFixedThreadPool(3);

 public void setSendSms(Sms sendSms) {
  this.sendSms = sendSms;
 }

 @Override
 public int sendMessage(String mobile, String message) {
  try {
   executorService.submit(() -> sendSms.sendMessage(mobile, message));
  }
  catch(Exception e) {
   Sysemt.out.println("提交義務時產生毛病" + e);
   return 0;
  }
  return -1;
 }

 public void destroy(){
  try{
   executorService.shutdown();
  }
  catch(Exception e){}
 }
}

代碼很簡略, 直接將Sms接口的sendMessage(mobile, message)辦法作為一個義務加到線程池的義務隊列中. 如許比及有余暇線程時, 就會履行sendSms.sendMessage(mobile, message)發送短信. 這裡我們假定只需保留到線程池便可以勝利發送短信. 由於發送掉敗的情形現實上很罕有.

到這裡同步/異步發送短信就算是完成了,  接上去的幾篇我們看看一些罕見的限制的完成, 好比: 一分鐘只能發1次, 一天只能發送5次等.
願望年夜家愛好這篇文章。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved