javaはショートメッセージのシリーズの同期を送信して、非同期はショートメッセージを送ります.
3736 ワード
この章はメールを送る第一部で、同期/非同期のメールを送るコードを言います.これから何編かは機能を少し改善して、送信頻度の制限と日の送信回数の制限を加えます.
メールを送る方法は多いかもしれません.私たちの方法はサービス業者が提供するサービスを利用することです.一般的に、これらのサービスは言語とは関係がないです.ここではjavaを使ってサンプルプログラムを書きます.2、開発文書は開発文書から見ることができます.httpを使って直接要求してもいいです.WebServiceを使ってメールを送ることができます.DEMOフォルダの下のjavaとjspフォルダのコードはhttpを使ってメールを送ることです.ここでは詳しくは言いません.WebServiceを使ってメールを送る方法をデモンストレーションします.3、クライアントコードを生成します.
インタフェースドキュメントから私達はそのWebServiceのWSDLのurlを知っています.http://106.ihuyi.cn/webservice/sms.php?WSDL 以下のコマンドを実行してクライアントコードを生成できます.
4、インターフェースを定義する
便利さのために、ここではまずインターフェースを定義します.
Sms.java
5、メッセージを同期して送る
まず、同期してメールを送るクラスを実現します.
Ihyi SmsImpl.java
18行目は、代理人のsubmitメソッドを使ってメールの内容を提出しました.この方法のパラメータ情報と返却値の意味はインターフェースドキュメントに詳しく説明されています.
19行目は結果の状態コードを取得しました.ドキュメント上の説明によると、状態コードは2のために提示されました.簡単のために、ここでは提出成功の状況に注目しています.状態コードは2のために説明のみで提出されました.公式サイトの「3-5秒以内の応答、100%到達」から推測できます.もし提出が成功すれば、基本的に3-5秒以内です.メールは成功します.ユーザーのネット事情によっては、少し遅れてもユーザーはメールを受け取ることができます.
このコードを使ってメールを送るのも簡単です.直接newの対象はアカウントとパスワードを設定してメールを送ることができます.
6、非同期にメールを送る
メールの送信はネットワーク通信に関連しているので、いくつかの遅延があるかもしれません.ユーザー体験を改善するために、非同期でメールを送信する方法があります.原理は簡単です.ユーザーがメールの送信を要求するなら、私たちは直接IhyiSmsImplのsendMessageを呼び出すのではなく、要求を保存します.その後、いくつかの消費者が任務を取り出して、sendMessage方法を呼び出してショートメッセージを送信します.
ここで、スレッド池を使って上記のタスクを完了します.
Aync SmsImpl.java
ここに同期/非同期でメールを送るのが完了しました. 続いて、いくつかの一般的な制限の実現を見てみます.例えば、一分に一回しか送信できない、一日に5回しか送信できないなどです.この文章が好きでほしいです.
メールを送る方法は多いかもしれません.私たちの方法はサービス業者が提供するサービスを利用することです.一般的に、これらのサービスは言語とは関係がないです.ここでは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回しか送信できないなどです.この文章が好きでほしいです.