发布WebQQ Client API库1.0.0正式版
最近在研发一个JIRA的插件,具体场景如下:
当测试人员提交一个问题时,需要通过QQ通知到开发人员,并且当问题属于SIT测试BUG时,需要自动的打开SVN上对应主干源代码的写权限。当开发人员修复并关闭问题时,需要自动的关闭SVN上对应主干源代码的写权限。
基本实现思路如下:
开发一个JIRA插件,基于ActiveMQ客户端,并监听JIRA的内部事件,如果是触发提交问题的事件,就将该事件发布到MQ主题中;开发一个服务器应用程序,订阅MQ上由JIRA插件发布的事件消息,并进行对应的处理,例如发送QQ消息或是修改SVN权限等。实际上实现JIRA插件这一端的程序并不困难,关键是查阅JIRA SDK相关手册,基本上没什么难度,下一篇文章,我们就来看看如何实现这个JIRA插件。这篇文章主要是关注如何实现与QQ的通讯,着实花费了不少心思。通过Google,发现目前网上大部分是基于WebQQ实现的,然后下载了一个什么iQQ的实现代码,没什么设计思想,基本上就是代码的堆叠,不过可读性还算好,基本能看懂,于是乎就有了想搞一个WebQQ客户端API库的冲动,方便今后的使用和扩展。经过几天的整理和重构终于把WebQQ核心部分抽出来并形成一个API库,以下为API接口定义:
/** * 接收QQ消息的监听器实现 * @author Administrator * @version $Id: ReceiveFriendMessageListener.java, v 0.1 2013-1-24 下午3:28:15 Administrator Exp $ */public class ReceiveMessageListener implements WebQQEventListener, InitializingBean, DisposableBean { /* logger */ private static final Logger LOGGER = Logger.getLogger(ReceiveMessageListener.class); /* 事件发布器 */ private WebQQEventPublisher eventPublisher; /** * 构造函数 */ public ReceiveMessageListener() { } /** * @see org.springframework.beans.factory.DisposableBean#destroy() */ @Override public void destroy() throws Exception { eventPublisher.unregister(this); //注销 } /** * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() */ @Override public void afterPropertiesSet() throws Exception { eventPublisher.register(this); //注册监听器 } /** * @see org.storevm.im.core.event.WebQQEventListener#onWebQQEvent(org.storevm.im.core.event.WebQQEvent) */ @Override public void onWebQQEvent(WebQQEvent event) { LogUtils.info(LOGGER, "接收到QQ事件, event.code={0}, body={1}", event.getEventCode(), event.getBody()); } /** * Setter method for property <tt>eventPublisher</tt>. * * @param eventPublisher value to be assigned to property eventPublisher */ public void setEventPublisher(WebQQEventPublisher eventPublisher) { this.eventPublisher = eventPublisher; }}以上代码的关键点是注册监听器和onWebQQEvent方法的实现。你也可以注册多个监听器,用于监听多个事件。更多的单元测试请下载源代码查看。
以下提供SVN源代码地址:
http://svn.storevm.org/svn/webqqclient/trunk
用户名和密码均为:reader
项目使用Maven进行管理,关于maven的使用请自行参考网上其他文章。最后希望对此有兴趣的同学可以相互交流经验技术。