基于JFinal、PostgreSQL开发的微信公众账号:王评老皇历(jrwplhl) 上线了。

使用的技术:

前端使用淘宝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调用性能数据,还不错。

基于JFinal、PostgreSQL开发的微信公众账号:王评老皇历(jrwplhl) 上线了。

应用界面:

基于JFinal、PostgreSQL开发的微信公众账号:王评老皇历(jrwplhl) 上线了。

----------------以下是广告,各位可以选择浏览---------------

王评老皇历独家获得了多项国家专利,是中国第一传统择吉日历,被公认为中国最权威老皇历。王评老师独创年运势图、月运势图、不同属相的每日吉凶和二十四小时吉凶。

微信公众账号: 王评老皇历

可通过微信-》发现->扫一扫扫描以下二维码加入:

基于JFinal、PostgreSQL开发的微信公众账号:王评老皇历(jrwplhl) 上线了。

多谢各位的捧场和支持。


你可能感兴趣的:(nginx,微信,jFinal)