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~