2015-12-24 60 views
0

背景:JCS LTCP AUX緩存配置和使用

我們有4個物理服務器(4 IPS),在JBOSS每一個正在運行的6 EAP上端口80.All請求運行被重定向到這些服務器中的任何一個通過負載平衡器。 現在我試圖爲這樣的分佈式env實現Java緩存系統,以便我們的屬性在每個服務器緩存中得到更新。

POC: 爲此,我們在實施JCS v1.3橫向緩存的本地系統上做了一個小的POC。 在我們的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 

和實施高速緩存中保存字符串屬性和緩存

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"; 
    } 
} 

得到它的getter和setter方法的應用精細部署沒有錯誤在獲得它。

測試方法: 在我的本地服務器和具有不同IP的遠程服務器中部署了project.war。兩臺機器都在同一個網絡中,因此在訪問其他IP時不存在防火牆問題。 已在我的服務器中保存了一個屬性並獲取它。 (工作正常) 試圖通過遠程機器通過本地獲取保存的屬性。 (它返回空白響應)。 意味着沒有實現分佈式緩存功能。

疑問: 1.輔助緩存設置是否正確?我的意思是配置 2.我是否正確測試它,或者如何在開發環境中測試它。 3.作爲JCS UDP Discovery,讓我們在多臺機器上支持相同的配置,那麼爲什麼它在遠程機器上工作? 4.還是有任何緩存機制,有很好的例子和文檔可以滿足我的應用需求(如背景部分所述)。

在此先感謝。

回答

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)); 

}