现在对插件的配置还不是那么直接和简单,我们即将对插件的配置方式进行调整。
在对Tigase载入插件的配置方式当中,最佳最简单的是通过init.properties文件。–sm-plugins属性值标明了哪些插件会在运行时被加载,多个插件之间使用逗号“,”分割。
–sm-plugins = list of plugins – 被服务器加载的插件列表。通常你不需要指定这个参数,服务器会自动加载默认的插件,默认的插件列表包含了所有可用的插件。如果你不想加载所有的插件:比如你的用户管理是由第三方的系统提供,tigase仅作为XMPP服务与其集成,这时你也许不希望用户通过XMPP来注册新用户,那么你就不应该加载用户注册插件;另一种情况是你开发了一个自己的插件来替换tigase的默认插件,比如vCard或者通讯录管理……
如果不希望加载,就在插件id之前加上一个“-”;如果希望加载,就在插件之前加上一个“+”, “+”是可以省略的。比如,下面的一个设置就是关闭了用户注册,并且添加了一个你自己的插件“your-plugin”:
--sm-plugins=-jabber:iq:register,+your-plugin
另外需要说明的是,每一个插件都会在一个或多个线程内运行。大多数访问数据库的插件都会在N个线程里运行,N为cpu或cpu的核心个数。在某些情况下,这样简单的配置方式还不够:比如数据库比较慢,或者你的服务负载压力比较大,你需要调节插件线程的个数。那么可以在插件id后面添加“=N”,N就是线程的个数。还是上面的那个例子,修改为8个线程执行“your-plugin”,16个线程执行认证服务:
--sm-plugins=-jabber:iq:register,+your-plugin=8,jabber:iq:auth=16
很明显,如果想自如的修改配置,必须要知道插件列表的id。获得插件列表id有两种途径:
一是通过日志文件:logs/tigase-console.log。如果你看一下日志文件,你会找到类似下面的输入:
Loading plugin: jabber:iq:register ... Loading plugin: jabber:iq:auth ... Loading plugin: urn:ietf:params:xml:ns:xmpp-sasl ... Loading plugin: urn:ietf:params:xml:ns:xmpp-bind ... Loading plugin: urn:ietf:params:xml:ns:xmpp-session ... Loading plugin: roster-presence ... Loading plugin: jabber:iq:privacy ... Loading plugin: jabber:iq:version ... Loading plugin: http://jabber.org/protocol/stats ... Loading plugin: starttls ... Loading plugin: vcard-temp ... Loading plugin: http://jabber.org/protocol/commands ... Loading plugin: jabber:iq:private ... Loading plugin: urn:xmpp:ping ...
在日志中会找到已经被加载的插件列表。
二是查看session manager的源码,那里硬编码了默认的插件列表:
private static final String[] PLUGINS_FULL_PROP_VAL = {"jabber:iq:register", "jabber:iq:auth", "urn:ietf:params:xml:ns:xmpp-sasl", "urn:ietf:params:xml:ns:xmpp-bind", "urn:ietf:params:xml:ns:xmpp-session", "roster-presence", "jabber:iq:privacy", "jabber:iq:version", "http://jabber.org/protocol/stats", "starttls", "msgoffline", "vcard-temp", "http://jabber.org/protocol/commands", "jabber:iq:private", "urn:xmpp:ping", "basic-filter", "domain-filter"};
无论怎样,你都必须把插件id正确地配置到“–sm-plugins”属性值当中,如果插件在正确的类路径下,那么它就会在运行时被加载。
还有一种加载插件的方式,如果看过之前的一章:Tigase插件-编写插件,应该还记得插件接口定义的方法中都有一个入口参数:Map setting,这个map里面包含了写在配置文件当中的那些配置项,它们会在插件执行时被传递给插件。
init.properties是你放置配置信息的地方,这些配置项都以字符串 sess-man/plugins-conf 开头,那么就可以把你的插件id放到你的配置项里:
sess-man/plugins-conf/message/key1=val1 sess-man/plugins-conf/message/key2=val2 sess-man/plugins-conf/message/key3=val3