バックグラウンド:
4 つの物理サーバー (4 つの IPS) があり、それぞれがポート 80 で実行されている JBOSS 6 EAP で実行されています。すべての要求は、ロード バランサーを介してこれらのサーバーのいずれかにリダイレクトされます。このような分散環境に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";
}
}
アプリケーションは正常にデプロイされ、起動時にエラーは発生しません。
テスト方法: project.war をローカル サーバーと異なる IP を持つリモート サーバーにデプロイしました。両方のマシンが同じネットワーク内にあるため、互いの IP にアクセスする際にファイアウォールの問題はありません。サーバーにプロパティを保存して取得しました。(うまくいきました)リモートマシンでローカル経由で保存されたプロパティを取得しようとしました。(空白の応答を返します)。分散キャッシュ機能が実現されていないことを意味します。
疑問 : 1. 補助キャッシュは適切に設定されていますか? 構成2を意味します。適切にテストしていますか、または開発環境でどのようにテストできますか。3. JCS UDP Discovery では、複数のマシンで同じ構成をサポートできますが、なぜリモート マシンでは機能しないのですか? 4. または、キャッシング メカニズムはありますか。適切な例とドキュメントがあれば、アプリケーションのニーズを十分に満たすことができます (背景セクションで説明したように)。
前もって感謝します。