javaはショートメッセージのシリーズの同期を送信して、非同期はショートメッセージを送ります.

3736 ワード

この章はメールを送る第一部で、同期/非同期のメールを送るコードを言います.これから何編かは機能を少し改善して、送信頻度の制限と日の送信回数の制限を加えます.
メールを送る方法は多いかもしれません.私たちの方法はサービス業者が提供するサービスを利用することです.一般的に、これらのサービスは言語とは関係がないです.ここではjavaを使ってサンプルプログラムを書きます.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.ihyi.u.を生成します.106パックと、多くの種類があります.これから自分達のコードを作成します.
4、インターフェースを定義する
便利さのために、ここではまずインターフェースを定義します.
Sms.java

public interface Sms {
 /**
  *  mobile    ,    message
  * 
  * @param mobile    
  * @param message     
  * @return     -1,        
  */
 int sendMessage(String mobile, String message);
}
このインターフェースはとても簡単で、一つの方法しかありません.
5、メッセージを同期して送る
まず、同期してメールを送るクラスを実現します.
Ihyi SmsImpl.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、非同期にメールを送る
メールの送信はネットワーク通信に関連しているので、いくつかの遅延があるかもしれません.ユーザー体験を改善するために、非同期でメールを送信する方法があります.原理は簡単です.ユーザーがメールの送信を要求するなら、私たちは直接IhyiSmsImplのsendMessageを呼び出すのではなく、要求を保存します.その後、いくつかの消費者が任務を取り出して、sendMessage方法を呼び出してショートメッセージを送信します.
ここで、スレッド池を使って上記のタスクを完了します.
Aync SmsImpl.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)を実行します.ここでは、スレッドプールに保存しておけばメールの送信に成功します.送信に失敗することは実際に珍しいです.
ここに同期/非同期でメールを送るのが完了しました.  続いて、いくつかの一般的な制限の実現を見てみます.例えば、一分に一回しか送信できない、一日に5回しか送信できないなどです.この文章が好きでほしいです.