微信开发之异步消息

1.微信回调模式

    微信开发首先要开启回调模式,并且验证通过,才能进行微信各种功能的开发。微信回调模式开启有如下几个条件:

    1、必须是80端口

    2、必须调用微信提供的解密API

JAVA版本的微信回调模式,我是基于Spring开发的,基于文档可以很快的构建起微信回调的代码,如下:

    /**

 * 微信验证接口

 * @param request

 * @param response

 * @throws IOException

 */

@RequestMapping(value = "index",method=RequestMethod.GET)

public void index(HttpServletRequest   request,HttpServletResponse response) throws IOException {

String result = weiXinService.WxURLValidate(request);

PrintWriter out = response.getWriter();

out.write(result);

out.close();

}

 

其中WxURLValidate主要是调用微信验证函数:WXBizMsgCrypt,之后返回验证的结果,验证通过即可开启成功回调模式。

2.微信触发消息

微信触发操作,举个例子,当微信开启自定义菜单后,点击菜单会触发操作,但是在服务器端如果微信5s没有回复就会再次尝试,一共尝试三次。这样就会有一个问题,如果微信触发的操作5s内没有回复信息,那就会触发三次这样的操作,为了避免这样的问题,微信异步回复就是必须的。

所谓异步回复,说白了就是新开启一个线程,将微信触发的操作在新的线程中操作,在主线程中,直接设定微信回复信息。

举个例子,最近在做亚马逊领带的数据的抓取练习,当我点击数据处理->获取数据,如下图:


这个会触发后台获取数据操作,由于是获取网络上的数据在插入数据库,这样会由于网络的原因让服务器在5s内无法完成回复,所以引入了异步信息回复,我的解决方案如下:

WeiXinThread weiXinThread = new WeiXinThread(amazonGetDataService,returnVO.getToUserName(),1,null,tokenApi.getToken().getAccess_token());

new Thread(weiXinThread).start();

returnVO.setContent("数据获取中……");    //服务器返回信息

这样只是开启一个线程,之后是就是返回信息,这样速度回很快5s内自然会回复,就避免了微信服务器再次发送请求。

3.线程中如何保持事务处理

虽然解决了微信5s内回复的问题,但是又有新问题,如何在线程中获取springbean。我做了如下尝试:

1、在线程中直接注入,结果报错:

   

2、用代码容器获取,代码如下:

       IAmazonBaseService amazonBaseService = ServerContext.getContext().getBean(AmazonBaseServiceImpl.class);

System.out.println(amazonBaseService.findAmazonDataByKey(null, null, null, null));

执行结果正常,可以输出查询结果。

在这个基础上进行更改,调用更改操作,经过验证也是可以的。

3、将本身的service从主线程中传递进入子线程,在子线程中就可以直接调用,经过测试也是可以的,代码如下:

WeiXinThread weiXinThread = new WeiXinThread(amazonGetDataService,returnVO.getToUserName(),1,null,tokenApi.getToken().getAccess_token());

其中amazonGetDataService是在主线程中注入的service

    经过以上操作,在子线程中可以操作数据库并保持事务处理。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值