http://hi.baidu.com/bngoogle/archive/tag/tigase
这是一篇关于安装tigase的 message-archive 组件的过程;使用的tigase 是 5.2.0 版本;
讲解前,我先介绍一下基础概念;
1、什么是 tigase
答:一个xmpp 聊天服务器,通俗的讲就是一个IM的服务端;
2、什么是 message-archive 组件
答:一个 聊天归档组件;因为tigase的允许以component(组件)或者 plugin(插件)的方式进行扩展(二次开发,不影响升级);作者在wiki里面有讲到因为客户端的原因,没办法记录下 聊天的进程id;
tigase project地址【https://projects.tigase.org/projects/tigase-server】
tigase message archive地址【https://projects.tigase.org/projects/message-archiving】
这个message-archive 使用 xep0136 协议,来记录日志;什么是xep0136【http://xmpp.org/extensions/xep-0136.html#auto】;查看后,你会知道。这个协议有一部分是描述,如何在客户端发送IQ信息允许服务端记录日志;
Client enables auto archiving
<iq type='set' id='auto1'>
<auto save='true' xmlns='urn:xmpp:archive'/>
</iq>
知道这个后,你会知道,并非安装了message-archive 组件后,日志就可以记录了;而是要客户端允许了;
那么如何安装?
把message-archive.jar 拷贝到 jars/tigase-message-archiving.jar 然后再 etc/init.properties 写下如下配置;
####begin
--comp-name-1=message-archive
--comp-class-1=tigase.archive.MessageArchiveComponent
message-archive/archive-repo-uri=jdbc:mysql://localhost:3306/tigase?user=root&password=123456&useUnicode=true&characterEncoding=UTF-8&autoCreateUser=true
--sm-plugins=message-archive-xep-0136
sess-man/plugins-conf/message-archive-xep-0136/component-jid=message-archive@mtb0109
sess-man/plugins-conf/message-archive-xep-0136/auto=true
###end
其中 jdbc的uri地址替换成你的jdbc 数据库授权地址;
message-archive@mtb0109 改成 message-archive@你的--virt-host配置
这样子,你启动tigase,就会在etc/tigase.log.0看到如下信息;
INFO: Adding receiver: MessageArchiveComponent
INFO: Adding component: MessageArchiveComponent
有看到如下信息,就代表加载该组件成功了。你也许还担心是不是真的加载成功。
那么打开psi,使用 discovery service ;你也会发现该组件(记得要使用管理员账号登陆才能看到 各个组件信息)
在数据库会自动创建两个表;tig_ma_jids、tig_ma_msgs;但是呢,你的聊天记录并没有记录到里面进去;why?
这时候,你只好去下载源码,把源码拷贝装到你的 tigase-server 工程里面;进行断点调试;
如果,你在调试之前,还搞不清楚 component 和 plugin的区别,建议看一下官方的开发介绍【http://www.tigase.org/devel-guide】
原理,简答的说下,通过 plugin 来启动 component。所以,你的断点记得通过plugin找入口,而不要死死的定在 component里面,估计永远都进不去。(这说明一个道理,断点要配合单步执行去看,而不是靠直觉)
虽然这些都做了,你会发现,你需要把 tigase.archive.MessageArchivePlugin 中 getAutoSave 函数 设置为 返回 true 才能有日志记录下来;至于原因,看上面那段xep0136 协议的描述,简单说,就是客户端没授权,既然客户端没授权,那你就手动强制授权吧;
也许,你还会发现,有些文档记录,需要把去强制修改 tigase.server.xmppsession.SessiomManagerConfig 中的 PLUGINS_FULL_PROP_VAL 常量,即添加 "message-archive-xep-0136";实际上上是不用了。因为启动进入,不是通过这里来的吧?实际上我加不加效果都一样;
ok。现在可以记录各个消息了吧?聊一下天吧,然后查看一下数据库,你会发现有内容加载进来了;GOOD LUCK
========================================================================
如果,你幸运的在自己未调试,就看到这篇文章,你会少走很多弯路;包括:
1、xep0136协议的内涵;
2、组件的加载(tigase源码中也有两个范例组件 tigase.server.test.EchoComponent 和 tigase.server.test.TestComponent有空可以看看;其中EchoComponent是发送消息给 echo@hostname 会记录你的pack信息 )
3、客户端service discovery的使用 (使用管理员账号才能使用该功能,有些组件的发现,需要服务端开发支持)
4、解决问题
但是,你也会错过这些经历:
1、信息流的加载过程;(从登录认证到聊天)
2、熟练使用intellij或者eclipse进行断点调试tigase的机会
3、理清tigase类和接口的继承关系的机会;
4、组件是怎样工作的;
5、session-manager的工作原理;
========================================================================
整个过程,我也参考了官网的一些文章,才解决了这些问题,所以,请多搜索吧
http://www.tigase.org/content/some-issues-message-arvhice-tigase 这篇文章很重要
http://www.tigase.org/content/problem-message-archive-and-ssl 这篇文章的提问者有点误导,回答者其实已经说明了一些原理;
http://www.tigase.org/content/get-all-packets-all-domains-components-vs-filters#comment-4774 这篇文章是个坑,记录下来,以免自己再次陷入;可以说,完全不是里面说的原因。但是这篇文章让我有机会深入料及 session-manager 的工作。所以可以说,还是很重要了
有个tigase群的群主 @kc 给了我一些帮助,这里一并感谢他;
========================================================================
同时,我粗略的附上一张图,是我简单归纳类之间关系的一张图,是使用 http://www.processon.com/ 这个工具画的。希望可以帮到你;