6. 分布式缓存集群环境配置 转

http://www.cnblogs.com/hoojo/archive/2012/07/19/2599534.html
http://www.cnblogs.com/hellowood23/p/5210267.html
http://blog.csdn.net/ni_hao_ya/article/details/9344779
http://www.cnblogs.com/hellowood23/p/5210267.html

这篇我将探讨ehcache的集群配置,并写两个分布在不同逻辑机器上的程序去测试是不是达到了集群效果。我的目标就是得到踏踏实实的配置成功的感觉。

一.集群配置方式

ehcache提供三种网络连接策略来实现集群,rmi,jgroup还有jms。这里只说rmi方式。同时ehcache可以可以实现多播的方式实现集群。也可以手动指定集群主机序列实现集群,本例应用手动指定。

这里说点题外话,本来看着分发包中的原来的例子配置是一件不怎么难的事情,应该很容易就能实现。但是一开始,我是在我的linux主机上和我的主操作系统windows上实现集群配置。结果反过来弄过去,都没有成功。然后在网上找一些别人的配置经验,竟然都是配置片段,没有完整的实例文件。结果配置半天没成功。但我怀疑是我的linux系统有些地方可能没有配置好,于是先不管他。有开启了我的另一个windows主机。然后把程序部署上去,竟然一次试验成功。高兴的同时,我得发句话“不要把代码片段称作实例,这很不负责任”。同时还存在一个问题,在linux下没有部署成功的原因有待查明。

具体说明:配置cacheManagerPeerListenerFactory是配宿主主机配置监听程序,来发现其他主机发来的同步请求

配置cacheManagerPeerProviderFactory是指定除自身之外的网络群体中其他提供同步的主机列表,用“|”分开不同的主机。

下面的例子的测试过程是:主机B缓存开启,并从名为UserCache的缓存中循环抓取键值为“key1”的元素,直到取到,才退出循环。主机A缓存启动,并在名为UserCache的缓存中放入键值为“key1”的元素。显然,如果主机B取到的元素,那么就证明同步成功,也就是集群成功。

所以在测试过程中先启动主机B的测试程序,在启动主机A的测试程序。

下面具体说配置文件以及测试程序:

1. 主机A的配置文件以及测试源代码

config/ehcache_cluster.xml

XML/HTML代码
  1. <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      
  2.     xsi:noNamespaceSchemaLocation="ehcache.xsd">      
  3.     <cacheManagerPeerProviderFactory      
  4.         class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"      
  5.         properties="peerDiscovery=manual       
  6.         rmiUrls=//192.168.1.254:40000/UserCache" />      
  7.       
  8.     <cacheManagerPeerListenerFactory      
  9.         class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"      
  10.         properties="hostName=192.168.1.126,port=40000,socketTimeoutMillis=120000" />      
  11.       
  12.     <defaultCache maxElementsInMemory="10000" eternal="false"      
  13.         timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"      
  14.         diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000"      
  15.         diskPersistent="false" diskExpiryThreadIntervalSeconds="120"      
  16.         memoryStoreEvictionPolicy="LRU">      
  17.         <cacheEventListenerFactory      
  18.             class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" />      
  19.     </defaultCache>      
  20.       
  21.     <cache name="UserCache" maxElementsInMemory="1000" eternal="false"      
  22.         timeToIdleSeconds="100000" timeToLiveSeconds="100000"      
  23.         overflowToDisk="false">      
  24.         <cacheEventListenerFactory      
  25.             class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" />      
  26.     </cache>      
  27. </ehcache>    

tutorial/UsingCacheCluster

Java代码
  1. package tutorial;       
  2.       
  3. import java.net.URL;       
  4.       
  5. import net.sf.ehcache.Cache;       
  6. import net.sf.ehcache.CacheManager;       
  7. import net.sf.ehcache.Element;       
  8.       
  9. public class UsingCacheCluster       
  10.       
  11.     public static void main(String[] args) throws Exception       
  12.         URL url UsingCacheCluster.class.getClassLoader().getResource(       
  13.                 "config/ehcache_cluster.xml");       
  14.         CacheManager manager new CacheManager(url);       
  15.         //取得Cache       
  16.         Cache cache manager.getCache("UserCache");       
  17.         Element element new Element("key1""value1");       
  18.         cache.put(element);       
  19.       
  20.         Element element1 cache.get("key1");       
  21.         System.out.println(element1.getValue());       
  22.           
  23.       
  24.     

2.  主机B上的配置文件以及测试代码

config/ehcache_cluster.xml

XML/HTML代码
  1. <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      
  2.     xsi:noNamespaceSchemaLocation="ehcache.xsd">      
  3.     <cacheManagerPeerProviderFactory      
  4.         class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"      
  5.         properties="peerDiscovery=manual       
  6.         rmiUrls=//192.168.1.126:40000/UserCache" />      
  7.       
  8.     <cacheManagerPeerListenerFactory      
  9.         class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"      
  10.         properties="hostName=192.168.1.254,port=40000, socketTimeoutMillis=120000" />      
  11.       
  12.     <defaultCache maxElementsInMemory="10000" eternal="false"      
  13.         timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"      
  14.         diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000"      
  15.         diskPersistent="false" diskExpiryThreadIntervalSeconds="120"      
  16.         memoryStoreEvictionPolicy="LRU">      
  17.         <cacheEventListenerFactory      
  18.             class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" />      
  19.     </defaultCache>      
  20.       
  21.     <cache name="UserCache" maxElementsInMemory="1000" eternal="false"      
  22.         timeToIdleSeconds="100000" timeToLiveSeconds="100000"      
  23.         overflowToDisk="false">      
  24.         <cacheEventListenerFactory      
  25.             class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" />      
  26.     </cache>      
  27. </ehcache>    

tutorial/UsingCacheCluster

Java代码
  1. package tutorial;       
  2.       
  3. import java.net.URL;       
  4.       
  5. import net.sf.ehcache.Cache;       
  6. import net.sf.ehcache.CacheManager;       
  7. import net.sf.ehcache.Element;       
  8.       
  9. public class UsingCacheCluster       
  10.       
  11.     public static void main(String[] args) throws Exception       
  12.         URL url UsingCacheCluster.class.getClassLoader().getResource(       
  13.                 "config/ehcache_cluster.xml");       
  14.         CacheManager manager new CacheManager(url);       
  15.         //取得Cache       
  16.         Cache cache manager.getCache("UserCache");       
  17.       
  18.         while(true      
  19.             Element cache.get("key1");       
  20.             if(e != null      
  21.                 System.out.println(e.getValue());       
  22.                 break      
  23.                   
  24.             Thread.sleep(1000);       
  25.               
  26.           
  27.       
  28.     

posted on 2016-06-19 00:22 youngturk 阅读(173) 评论(0)  编辑  收藏 所属分类: 笔试题


只有注册用户登录后才能发表评论。


网站导航:
 
<2016年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

导航

统计

公告

this year :
1 jQuery
2 freemarker
3 框架结构
4 口语英语

常用链接

留言簿(6)

随笔分类

随笔档案

文章分类

文章档案

相册

EJB学习

Flex学习

learn English

oracle

spring MVC web service

SQL

Struts

生活保健

解析文件

搜索

最新评论

阅读排行榜

评论排行榜