实验配置两个EHCache环境(Master、Slave)
在Master端不断变更数据,Slave端可以收到变更的缓存数据。
1.手工指定方式
Master监听40000,Slave监听40001
Master配置,监听40000。如果缓存变化,则使用RMI方式通知127.0.0.1:40001的同名缓存。
-
<?xml version="1.0" encoding="UTF-8"?>
-
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-
xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
-
monitoring="autodetect" dynamicConfig="true">
-
<cacheManagerPeerProviderFactory
-
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
-
properties="peerDiscovery=manual,
-
rmiUrls=//127.0.0.1:40001/memoryCache"
-
propertySeparator="," />
-
<cache name="memoryCache" maxEntriesLocalHeap="10" eternal="false"
-
timeToIdleSeconds="100" timeToLiveSeconds="100">
-
<cacheEventListenerFactory
-
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
-
properties="replicateAsynchronously=false, replicatePuts=true,
-
replicatePutsViaCopy=true, replicateUpdates=true,
-
replicateUpdatesViaCopy=true, replicateRemovals=true" />
-
</cache>
-
<cacheManagerPeerListenerFactory
-
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
-
properties="hostName=127.0.0.1,
-
port=40000,
-
socketTimeoutMillis=120000"
-
propertySeparator="," />
-
</ehcache>
Slave配置。
-
<?xml version="1.0" encoding="UTF-8"?>
-
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-
xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
-
monitoring="autodetect" dynamicConfig="true">
-
<cacheManagerPeerProviderFactory
-
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
-
properties="peerDiscovery=manual,
-
rmiUrls=//127.0.0.1:40000/memoryCache"
-
propertySeparator="," />
-
<cache name="memoryCache" maxEntriesLocalHeap="10" eternal="false"
-
timeToIdleSeconds="100" timeToLiveSeconds="100">
-
<cacheEventListenerFactory
-
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
-
properties="replicateAsynchronously=false, replicatePuts=false,
-
replicatePutsViaCopy=false, replicateUpdates=true,
-
replicateUpdatesViaCopy=true, replicateRemovals=false" />
-
</cache>
-
<cacheManagerPeerListenerFactory
-
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
-
properties="hostName=127.0.0.1,
-
port=40001,
-
socketTimeoutMillis=120000"
-
propertySeparator="," />
-
</ehcache>
Master程序不断修改缓存数据。
-
import net.sf.ehcache.Cache;
-
import net.sf.ehcache.CacheManager;
-
import net.sf.ehcache.Element;
-
-
public class Master {
-
public static void main(String[] args) throws InterruptedException {
-
CacheManager cacheManager = new CacheManager("src/master.xml");
-
Cache cache = cacheManager.getCache("memoryCache");
-
int data = 0;
-
while (true) {
-
cache.put(new Element("data", data));
-
System.out.println("master:" + cache.get("data").getObjectValue());
-
data++;
-
Thread.sleep(1000);
-
}
-
}
-
}
Slave可以感知缓存数据的变化。
-
import net.sf.ehcache.Cache;
-
import net.sf.ehcache.CacheManager;
-
-
public class Slave {
-
public static void main(String[] args) throws InterruptedException {
-
CacheManager cacheManager = new CacheManager("src/slave.xml");
-
Cache cache = cacheManager.getCache("memoryCache");
-
while (true) {
-
if (cache.get("data") != null) {
-
System.out.println("slave:" + cache.get("data").getObjectValue());
-
}
-
Thread.sleep(1000);
-
}
-
}
-
}
Master Console:
master:0
master:1
master:2
master:3
Slave Console:
slave:2
slave:3
因为Slave后启动,所以有两个数据变更没有收到。
2.自动配置方式
如果集群节点很多,手动配置很不方便。EHCache可以使用组播进行自动成员发现。
将所有节点的成员发现(cacheManagerPeerProviderFactory)进行如下设置。
-
<cacheManagerPeerProviderFactory
-
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
-
properties="hostName=127.0.0.1,
-
peerDiscovery=automatic, multicastGroupAddress=230.0.0.1,
-
multicastGroupPort=4446, timeToLive=32" />
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1063028/
,如需转载,请注明出处,否则将追究法律责任。