Java回调机制

微信公众号开发过程中,使用到了回调模式,在给用户发送模板消息的时候每次都要等很长时间,这很不合理,所以就想到使用回调模式来适当的缩短等待时间。直接上代码:

创建回调模式的回调接口,服务器执行完成后调用该接口来返回值。

1 /**
2  * 回调接口
3  * @author xiao quan
4  * @create 2015年12月9日 上午11:54:48
5  * @varsion 1.0
6  */
7 public interface MsgCallback {
8     public void handler(String status);
9 }

发送服务器端(只包含调用发送微信消息方法):

 1 /**
 2  * 模拟服务器
 3  * @author xiao quan
 4  * @create 2015年12月9日 上午11:57:10
 5  * @varsion 1.0
 6  */
 7 public class SendServer {
 8     
 9     public void getClientMsg(MsgCallback callback,WeixinMsg msg){
10         System.out.println("【服务器】:服务器接收到待发送的消息为 "+msg.getMsg());
11         String status = "200";
12         //模拟服务器请求微信服务器等耗时过程
13         try{
14             Thread.sleep(5*1000);
15 //            String result = HttpUtil.post(WXURL,data);
16             if(msg.getTo().contains("1")){//测试:若包含1则 发送失败
17                 status = "201";
18             }
19         }catch(InterruptedException e){
20             e.printStackTrace();
21         }
22         String result = "【服务端】:发送给"+msg.getTo()+"微信消息( "+msg.getMsg()+" )";
23         if("200".equals(status)){//默认成功
24             System.out.println(result+"发送成功,返回成功状态  200");
25         }else{
26             System.out.println(result+"发送失败,返回失败状态  201");
27         }
28         callback.handler(status);//回调方法
29     }
30 }

模拟调用类:

 1 /**
 2  * 模拟发送客户端,实现回调接口
 3  * @author xiao quan
 4  * @create 2015年12月9日 上午11:58:22
 5  * @varsion 1.0
 6  */
 7 public class SendClient implements MsgCallback {
 8     private SendServer server;
 9     public SendClient(SendServer server){
10         this.server = server;
11     }
12     public void sendMsg(final WeixinMsg msg){//发送消息方法
13         System.out.println("【操作员】:待发送的微信消息为 "+msg.getMsg());
14         new Thread(new Runnable() {
15             @Override
16             public void run() {
17                 server.getClientMsg(SendClient.this, msg);
18             }
19         }).start();
20         System.out.println("【操作员】:\""+msg.getFrom()+"\"发送给\""+msg.getTo()+"\"的微信消息( "+msg.getMsg()+" )已进入发送队列!");
21     }
22     @Override
23     public void handler(String status) {
24         System.out.println("【操作员】:服务器发送微信返回状态 "+status);
25     }
26 }

给出一个测试类:

 1 /**
 2  * @author xiao quan
 3  * @create 2015年12月9日 下午12:08:30
 4  * @varsion 1.0
 5  */
 6 public class TestCallBack {
 7     public static void main(String[] args) {
 8         SendServer server = new SendServer();
 9         SendClient client = new SendClient(server);
10         WeixinMsg msg;
11         for(int i=0;i<5;i++){
12             msg = new WeixinMsg();
13             msg.setFrom("发送者");
14             msg.setMsg("感谢您的宝贵建议");
15             msg.setTo(i+"");
16             client.sendMsg(msg);
17         }
18     }
19 }

测试结果:

 1 【操作员】:待发送的微信消息为 感谢您的宝贵建议
 2 【操作员】:"发送者"发送给"0"的微信消息( 感谢您的宝贵建议 )已进入发送队列!
 3 【操作员】:待发送的微信消息为 感谢您的宝贵建议
 4 【操作员】:"发送者"发送给"1"的微信消息( 感谢您的宝贵建议 )已进入发送队列!
 5 【操作员】:待发送的微信消息为 感谢您的宝贵建议
 6 【服务器】:服务器接收到待发送的消息为 感谢您的宝贵建议
 7 【操作员】:"发送者"发送给"2"的微信消息( 感谢您的宝贵建议 )已进入发送队列!
 8 【操作员】:待发送的微信消息为 感谢您的宝贵建议
 9 【操作员】:"发送者"发送给"3"的微信消息( 感谢您的宝贵建议 )已进入发送队列!
10 【服务器】:服务器接收到待发送的消息为 感谢您的宝贵建议
11 【操作员】:待发送的微信消息为 感谢您的宝贵建议
12 【操作员】:"发送者"发送给"4"的微信消息( 感谢您的宝贵建议 )已进入发送队列!
13 【服务器】:服务器接收到待发送的消息为 感谢您的宝贵建议
14 【服务器】:服务器接收到待发送的消息为 感谢您的宝贵建议
15 【服务器】:服务器接收到待发送的消息为 感谢您的宝贵建议
16 【服务端】:发送给0微信消息( 感谢您的宝贵建议 )发送成功,返回成功状态  200
17 【操作员】:服务器发送微信返回状态 200
18 【服务端】:发送给2微信消息( 感谢您的宝贵建议 )发送成功,返回成功状态  200
19 【操作员】:服务器发送微信返回状态 200
20 【服务端】:发送给3微信消息( 感谢您的宝贵建议 )发送成功,返回成功状态  200
21 【操作员】:服务器发送微信返回状态 200
22 【服务端】:发送给1微信消息( 感谢您的宝贵建议 )发送失败,返回失败状态  201
23 【操作员】:服务器发送微信返回状态 201
24 【服务端】:发送给4微信消息( 感谢您的宝贵建议 )发送成功,返回成功状态  200
25 【操作员】:服务器发送微信返回状态 200

以上为简单的实现回调过程,感兴趣的童鞋可以深入研究下

Thanks For Maths~

posted @ 2015-12-09 15:27  xiao_quan  阅读(236)  评论(0编辑  收藏  举报