`

负载均衡中ehcache的配置

阅读更多

我用两台机子(tomcat1和tomcat2)做了负载均衡,用的是ehcache,做了usercache 和resourcecache,问题出现了,在tomcat1上注册的用户无法在tomcat2上登录,后来我修改了acegi的设置,让用户登录时不从usercache读取数据,而是从数据库获取数据,但是随之问题又出现了,在tomcat1上注册的用户,可以在tomcat2上登陆了,但是权限却无法同步了。于是我明白了,一定要用ehcache的分步式缓存,其实ecache自1.2+版本后就支持了分步式缓存,配置也很简单,以下是我的配置例子,希望对你们有用

 

<defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            overflowToDisk="true"
            timeToIdleSeconds="0"
            timeToLiveSeconds="0"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"/>
   
     <!--<cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1,multicastGroupPort=4446, timeToLive=32"/>-->

<!--这是在配置tomcat1服务器,其中192.168.0.2是tomcat1的IP,192.168.0.118是tomcat2的IP,tomcat2的配置就是把这些IP互换就行了-->
     <cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
     properties="peerDiscovery=manual,rmiUrls=//192.168.0.118:40001/userCache|//192.168.0.118:40001/resourceCache"/>
   <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" properties="hostName=192.168.0.2,port=40001,socketTimeoutMillis=120000"/> 

   
    <!-- acegi cache-->

    <cache name="userCache" maxElementsInMemory="10000" eternal="true" overflowToDisk="true">
     <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
    </cache>


    <!-- acegi cache-->

    <cache name="resourceCache" maxElementsInMemory="10000" eternal="true" overflowToDisk="true">
     <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
    </cache>

 

注意:如果你用的是tomcat服务器,请一定要将ehcache的jar包放到tomcat的common/lib下,否则会出现

java.io.EOFException

 

希望这些能对你们有用

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics