JCS LTCP AUX缓存配置和使用

时间:2015-12-24 13:23:46

标签: java caching jcs

背景

我们有4个物理服务器(4个IPS),每个服务器在端口80上运行的JBOSS 6 EAP中运行。所有请求都通过负载均衡器重定向到这些服务器中的任何一个。 现在我尝试为这样的分布式env实现Java缓存系统,以便在每个服务器缓存中更新我们的属性。

POC: 为此,我们在本地系统上实现了一个小POC,实现了JCS v1.3横向缓存。 在我们的maven项目中启用它。以下配置用于.ccf文件:

  jcs.default=
  jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
  jcs.default.cacheattributes.MaxObjects=1000
  jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
 # PRE-DEFINED CACHE REGION

##############################################################
##### AUXILIARY CACHES
# LTCP AUX CACHE
   jcs.auxiliary.LTCP=org.apache.commons.jcs.auxiliary.lateral.socket.tcp.LateralTCPCacheFactory
   jcs.auxiliary.LTCP.attributes=org.apache.commons.jcs.auxiliary.lateral.socket.tcp.TCPLateralCacheAttributes
  #jcs.auxiliary.LTCP.attributes.TcpServers=152.144.219.209:8080
   jcs.auxiliary.LTCP.attributes.TcpListenerPort=1118
   jcs.auxiliary.LTCP.attributes.UdpDiscoveryAddr=228.5.6.8
   jcs.auxiliary.LTCP.attributes.UdpDiscoveryPort=6780
   jcs.auxiliary.LTCP.attributes.UdpDiscoveryEnabled=true
   jcs.auxiliary.LTCP.attributes.Receive=true
   jcs.auxiliary.LTCP.attributes.AllowGet=true
   jcs.auxiliary.LTCP.attributes.IssueRemoveOnPut=false
   jcs.auxiliary.LTCP.attributes.FilterRemoveByHashCode=false
   jcs.auxiliary.LTCP.attributes.SocketTimeoOt=1001
   jcs.auxiliary.LTCP.attributes.OpenTimeOut=2002
   jcs.auxiliary.LTCP.attributes.ZombieQueueMaxSize=2000

实现getter和setter方法,用于在缓存中保存字符串属性并从缓存中获取

public void addProp(String propId)
        throws PimsAppException {
    try {
        configMSCache.put(propId, propId);
    } catch (CacheException e) {
        e.printStackTrace();
    }       

}

@Override
public String testProp(String propId) throws PimsAppException {
    if(configMSCache!=null){
        return (String) configMSCache.get(propId);
    }else{
    return "It dint work";
    }
} 

应用程序部署正常,没有错误启动它。

测试方法: 在我的本地服务器和具有不同IP的远程服务器中部署了project.war。两台机器都在同一网络中,因此在访问对方IP时没有防火墙问题。 已经在我的服务器中保存了一个属性并获得它。 (工作正常) 试图通过我的本地远程机器获取保存的属性。 (它返回空白响应)。 意味着未实现分布式缓存功能。

怀疑: 1.辅助缓存是否设置正确?我的意思是配置 2.我是否正确测试它或如何在开发环境中测试它。 3.作为JCS UDP Discovery,让我们在多台机器上支持相同的配置,那么为什么它在远程机器上工作呢? 4.或者是否有任何缓存机制,良好的示例和文档可以满足我的应用程序需求(如背景部分所述)。

提前致谢。

1 个答案:

答案 0 :(得分:1)

这个回复可能为时已晚。但我会建议,以便在两台服务器上记录统计数据并查看。有可能它正在传播缓存,但只是在处理时间内,有一个问题是阅读它。 例如:

JCSAdminBean admin = new JCSAdminBean();
LinkedList linkedList = admin.buildCacheInfo();
ListIterator iterator = linkedList.listIterator();
while (iterator.hasNext()) {
    CacheRegionInfo info = (CacheRegionInfo)iterator.next();
    CompositeCache compCache = info.getCache();
    System.out.println("Cache Name: " + compCache.getCacheName());
    System.out.println("Cache Type: " + compCache.getCacheType());
    System.out.println("Cache Misses (not found): " + compCache.getMissCountNotFound());
    System.out.println("Cache Misses (expired): " + compCache.getMissCountExpired());
    System.out.println("Cache Hits (memory): " + compCache.getHitCountRam());
    System.out.println("Cache value: " + compCache.get(propId));

}