使用的技术:
前端使用淘宝tengine(Nginx),基于JAVA语言,采用JFinal开发,数据库采用PostgreSQL,缓存及队列采用SSDB。
XML处理采用dom4j,JSON处理采用温少的fastjson。http相关处理采用HttpClient库。
经过测试发现使用Nginx做前端可大幅提高响应速度。主要原因可能是Nginx建立连接更快吧。
核心接口:
public interface Handler<R,T> { T handle(R request); }
public interface RequestMessage { public void parseXml(Element root); }
public interface ResponseMessage { public void toXml(Element root); }
public interface EngineService extends Service{ /** * @Title : handle * @Description : 处理收到的消息字符串 * @param : @param msgText 消息字符串 * @return : String xml字符串 */ public String handle(String msgText); /** * @Title : registEventHandler * @Description : 注册事件处理器 * @param : @param eventType 事件类型 * @param : @param handler 事件处理器 */ public void registEventHandler(EventType eventType,Handler<RequestMessage , ResponseMessage> handler); /** * @Title : registInMessageHandler * @Description : 注册消息处理器 * @param : @param msgType 消息类型 * @param : @param handler 消息处理器 */ public void registInMessageHandler(InMsgType inMsgType, Handler<RequestMessage , ResponseMessage> handler); /** * @Title : registUnsupportedInMesssageHandler * @Description : 注册不支持的消息/事件处理器 * @param : @param handler 处理器 */ public void registUnsupportedInMessageHandler(Handler<RequestMessage , ResponseMessage> handler); /** * @Title : registUnsupportedMesssageHandler * @Description : 注册不支持的消息/事件处理器 * @param : @param handler 处理器 */ public void registUnsupportedEventHandler(Handler<RequestMessage , ResponseMessage> handler); }
EngineService的handle方法会侦测消息事件类型,然后构建对应的对象,并调用对象的parseXML方法完成对消息xml的分析,最后调用注册的handler来处理响应的消息或者事件。
具体业务实现对应的handler,然后注册到某个消息或者事件上就可以了。
与JFinal集成部分代码,主要就是集成JFinal的Handler,然后把请求转发到EngineService的handle方法上。
public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) { isHandled[0] = true; try { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); if (checkSignature(request)) { if (request.getMethod().equals("POST")) { // 微信发送过来的数据(用户发起) // 接收post过来的数据 String requestStr = readPostData(request); if (logger.isDebugEnabled()) { logger.debug("POST请求,转发到威尔伯乐微信引擎处理"); logger.debug("POST请求数据:" + requestStr); } String responseStr = null; if (requestStr != null) { responseStr = engineService.handle(requestStr); } if (logger.isDebugEnabled()) { logger.debug("威尔伯乐微信引擎处理-处理结束"); logger.debug("响应数据:" + responseStr); } if (responseStr != null) { // 结果不为空,写入结果 response.setContentType("text/xml"); response.getWriter().write(responseStr); response.getWriter().flush(); } } else if (request.getMethod().equals("GET")) { if (logger.isDebugEnabled()) { logger.debug("GET请求,微信公共平台验证URL有效性"); } String echostr = request.getParameter("echostr"); if (echostr != null) { // 若echostr不为空,则为微信公共平台验证URL有效性 response.getWriter().write(echostr); response.getWriter().flush(); } } } else { // 签名失败,不做任何处理。 if (logger.isDebugEnabled()) { logger.debug("签名验证失败"); } } } catch (Exception e) { e.printStackTrace(); } }
只能给出这些信息了。其他源码不能公开了。
这是微信公众平台给出的API调用性能数据,还不错。
应用界面:
----------------以下是广告,各位可以选择浏览---------------
王评老皇历独家获得了多项国家专利,是中国第一传统择吉日历,被公认为中国最权威老皇历。王评老师独创年运势图、月运势图、不同属相的每日吉凶和二十四小时吉凶。
微信公众账号: 王评老皇历
可通过微信-》发现->扫一扫扫描以下二维码加入:
多谢各位的捧场和支持。