ITPub博客

首页 > 应用开发 > Java > EHCache集群

EHCache集群

原创 Java 作者:壹頁書 时间:2013-12-11 21:13:32 0 删除 编辑
实验配置两个EHCache环境(Master、Slave)
在Master端不断变更数据,Slave端可以收到变更的缓存数据。

1.手工指定方式
    Master监听40000,Slave监听40001
   
    Master配置,监听40000。如果缓存变化,则使用RMI方式通知127.0.0.1:40001的同名缓存。
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.     xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
  4.     monitoring="autodetect" dynamicConfig="true">
  5.     <cacheManagerPeerProviderFactory
  6.         class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
  7.         properties="peerDiscovery=manual,
  8.                           rmiUrls=//127.0.0.1:40001/memoryCache"
  9.         propertySeparator="," />
  10.     <cache name="memoryCache" maxEntriesLocalHeap="10" eternal="false"
  11.         timeToIdleSeconds="100" timeToLiveSeconds="100">
  12.         <cacheEventListenerFactory
  13.             class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
  14.             properties="replicateAsynchronously=false, replicatePuts=true,
  15.                             replicatePutsViaCopy=true, replicateUpdates=true,
  16.                             replicateUpdatesViaCopy=true, replicateRemovals=true" />
  17.     </cache>
  18.     <cacheManagerPeerListenerFactory
  19.         class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
  20.         properties="hostName=127.0.0.1,
  21.                     port=40000,
  22.                     socketTimeoutMillis=120000"
  23.         propertySeparator="," />
  24. </ehcache>

    Slave配置。
    
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.     xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
  4.     monitoring="autodetect" dynamicConfig="true">
  5.     <cacheManagerPeerProviderFactory
  6.         class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
  7.         properties="peerDiscovery=manual,
  8.                           rmiUrls=//127.0.0.1:40000/memoryCache"
  9.         propertySeparator="," />
  10.     <cache name="memoryCache" maxEntriesLocalHeap="10" eternal="false"
  11.         timeToIdleSeconds="100" timeToLiveSeconds="100">
  12.         <cacheEventListenerFactory
  13.             class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
  14.             properties="replicateAsynchronously=false, replicatePuts=false,
  15.                             replicatePutsViaCopy=false, replicateUpdates=true,
  16.                             replicateUpdatesViaCopy=true, replicateRemovals=false" />
  17.     </cache>
  18.     <cacheManagerPeerListenerFactory
  19.         class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
  20.         properties="hostName=127.0.0.1,
  21.                     port=40001,
  22.                     socketTimeoutMillis=120000"
  23.         propertySeparator="," />
  24. </ehcache>
    Master程序不断修改缓存数据。

  1. import net.sf.ehcache.Cache;
  2. import net.sf.ehcache.CacheManager;
  3. import net.sf.ehcache.Element;

  4. public class Master {
  5.     public static void main(String[] args) throws InterruptedException {
  6.         CacheManager cacheManager = new CacheManager("src/master.xml");
  7.         Cache cache = cacheManager.getCache("memoryCache");
  8.         int data = 0;
  9.         while (true) {
  10.             cache.put(new Element("data", data));
  11.             System.out.println("master:" + cache.get("data").getObjectValue());
  12.             data++;
  13.             Thread.sleep(1000);
  14.         }
  15.     }
  16. }

    Slave可以感知缓存数据的变化。

  1. import net.sf.ehcache.Cache;
  2. import net.sf.ehcache.CacheManager;

  3. public class Slave {
  4.     public static void main(String[] args) throws InterruptedException {
  5.         CacheManager cacheManager = new CacheManager("src/slave.xml");
  6.         Cache cache = cacheManager.getCache("memoryCache");
  7.         while (true) {
  8.             if (cache.get("data") != null) {
  9.                 System.out.println("slave:" + cache.get("data").getObjectValue());
  10.             }
  11.             Thread.sleep(1000);
  12.         }
  13.     }
  14. }

Master Console:
master:0
master:1
master:2
master:3

Slave Console:
slave:2
slave:3

因为Slave后启动,所以有两个数据变更没有收到。

2.自动配置方式
    如果集群节点很多,手动配置很不方便。EHCache可以使用组播进行自动成员发现。
    将所有节点的成员发现(cacheManagerPeerProviderFactory)进行如下设置。
    
  1. <cacheManagerPeerProviderFactory
  2.         class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
  3.         properties="hostName=127.0.0.1,
  4.                                     peerDiscovery=automatic, multicastGroupAddress=230.0.0.1,
  5.                                     multicastGroupPort=4446, timeToLive=32" />


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1063028/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    620
  • 访问量
    6339926