Ehcache与terracotta集群配置
原文地址如下:
从启动结果中可以看到NodeID[XXXXXX]joinedthecluster,节点已加入集群,代表terracotta结群建立成功,下面运行测试代码:
A服务器:
Java代码收藏代码
<spanstyle="font-size:medium;">importnet.sf.ehcache.Cache;
importnet.sf.ehcache.CacheManager;
importnet.sf.ehcache.Element;
publicclassEhcacheDemo{
privatestaticfinalCacheManagerCACHE_MANAGER=CacheManager.create();
publicstaticCachegetCache(StringcacheName){
returnCACHE_MANAGER.getCache(cacheName);
}
publicstaticObjectgetObjectValue(Stringkey){
Elemente=getCache("demoCache").get(key);
Objectval=null;
if(e==null){
System.out.println("缓存中不存在,读取数据");
/**用于测试集群是否正常工作,当缓存中的数据超时时加入新数据,同时将B服务器中的terracotta服务器关闭,测试B服务器中的程序是否能够获取数据
*
**/
EhcacheDemo.put("name","11111");
EhcacheDemo.put("password","333");
}else{
val=e.getObjectValue();
}
returnval;
}
publicstaticvoidput(Stringkey,Objectval){
Elemente=newElement(key,val);
getCache("demoCache").put(e);
}
publicstaticvoiddelete(Stringkey){
getCache("demoCache").remove(key);
}
publicvoidclose(){
CACHE_MANAGER.shutdown();
}
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
EhcacheDemo.put("name","sssssss");
EhcacheDemo.put("password","22222");
Threadt=newThread(newRunnable(){
@Override
publicvoidrun(){
while(true){
try{
Thread.currentThread().sleep(10000L);
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println(EhcacheDemo.getObjectValue("name")+""+getObjectValue("password"));
}
}
});
t.start();
}
}
</span>
B服务器:
Java代码收藏代码
<spanstyle="font-size:medium;">importnet.sf.ehcache.Cache;
importnet.sf.ehcache.CacheManager;
importnet.sf.ehcache.Element;
publicclassEhcacheDemo{
privatestaticfinalCacheManagerCACHE_MANAGER=CacheManager.create();
publicstaticCachegetCache(StringcacheName){
returnCACHE_MANAGER.getCache(cacheName);
}
publicstaticObjectgetObjectValue(Stringkey){
Elemente=getCache("demoCache").get(key);
Objectval=null;
if(e==null){
System.out.println("缓存中不存在,读取数据");
}else{
val=e.getObjectValue();
}
returnval;
}
publicstaticvoidput(Stringkey,Objectval){
Elemente=newElement(key,val);
getCache("demoCache").put(e);
}
publicstaticvoiddelete(Stringkey){
getCache("demoCache").remove(key);
}
publicvoidclose(){
CACHE_MANAGER.shutdown();
}
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
EhcacheDemo.put("name","sssssss");
EhcacheDemo.put("password","22222");
Threadt=newThread(newRunnable(){
@Override
publicvoidrun(){
while(true){
try{
Thread.currentThread().sleep(10000L);
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println(EhcacheDemo.getObjectValue("name")+""+getObjectValue("password"));
}
}
});
t.start();
}
}
</span>
A与B服务器中的程序有一点区别,详见注释部分,主要为了测试集群是否工作正常,当一个节点挂掉之后,B服务器上的测试程序是否能获取新的缓存数据。
同时运行2个测试程序后,我们可以观察terracotta是否正常工作,运行ehcache\terracotta\bin下的dev-console.bat并连接到2个服务器的terracotta服务器: