通过对ClusterManager 源码的学习,对其Cluster的 整体思路有了一些认识。
在ClusterManager 中有一段静态代码段,如下:
static {
// Listen for clustering property changes (e.g. enabled/disabled)
PropertyEventDispatcher.addListener(new PropertyEventListener() {
public void propertySet(String property, Map<String, Object> params) { /* ignore */ }
public void propertyDeleted(String property, Map<String, Object> params) { /* ignore */ }
public void xmlPropertyDeleted(String property, Map<String, Object> params) { /* ignore */ }
public void xmlPropertySet(String property, Map<String, Object> params) {
if (ClusterManager.CLUSTER_PROPERTY_NAME.equals(property)) {
if (Boolean.parseBoolean((String) params.get("value"))) {
// Reload/sync all Jive properties
JiveProperties.getInstance().init();
ClusterManager.startup();
} else {
ClusterManager.shutdown();
}
}
}
});其主要功能是 建立一个 属性 监听器,并插入到 PropertyEventDispatcher 中。PropertyEventDispatcher 顾名思义,就是一个属性事件分发器,当openfire系统中的某个属性发生变换后,PropertyEventDispatcher 会通知其保存的各个PropertyEventListener(当然包含此处建立的这个)。
在这里,属性监听器 的主要功能 体现在 xmlPropertySet 函数中,即 监听 clustering.enabled 属性值的变化,如果 为变为true,则重载所有Jive属性值,并调
用 ClusterManager.startup() 来启动cluster。 否则,则关闭cluster,即执行 ClusterManager.shutdown()。
下面来看看ClusterManager.startup() 的代码:
public static synchronized void startup() {
if (isClusteringEnabled() &&

本文深入探讨了Openfire中ClusterManager的源码,阐述了Cluster的整体工作原理。重点分析了xmlPropertySet如何监听clustering.enabled属性变化,当属性值为true时,启动cluster,否则关闭。接着详细讲解了ClusterManager.startup()的执行过程,包括调用CacheFactory.startClustering()启动集群,以及后续的服务器监听和集群事件监听设置,最终实现10秒周期的缓存状态更新。
最低0.47元/天 解锁文章
910

被折叠的 条评论
为什么被折叠?



