6. 分布式緩存集群環境配置 轉
這篇我將探討ehcache的集群配置,并寫兩個分布在不同邏輯機器上的程序去測試是不是達到了集群效果。我的目標就是得到踏踏實實的配置成功的感覺。
一.集群配置方式
ehcache提供三種網絡連接策略來實現集群,rmi,jgroup還有jms。這里只說rmi方式。同時ehcache可以可以實現多播的方式實現集群。也可以手動指定集群主機序列實現集群,本例應用手動指定。
這里說點題外話,本來看著分發包中的原來的例子配置是一件不怎么難的事情,應該很容易就能實現。但是一開始,我是在我的linux主機上和我的主操作系統windows上實現集群配置。結果反過來弄過去,都沒有成功。然后在網上找一些別人的配置經驗,竟然都是配置片段,沒有完整的實例文件。結果配置半天沒成功。但我懷疑是我的linux系統有些地方可能沒有配置好,于是先不管他。有開啟了我的另一個windows主機。然后把程序部署上去,竟然一次試驗成功。高興的同時,我得發句話“不要把代碼片段稱作實例,這很不負責任”。同時還存在一個問題,在linux下沒有部署成功的原因有待查明。
具體說明:配置cacheManagerPeerListener
配置cacheManagerPeerProvider
下面的例子的測試過程是:主機B緩存開啟,并從名為UserCache的緩存中循環抓取鍵值為“key1”的元素,直到取到,才退出循環。主機A緩存啟動,并在名為UserCache的緩存中放入鍵值為“key1”的元素。顯然,如果主機B取到的元素,那么就證明同步成功,也就是集群成功。
所以在測試過程中先啟動主機B的測試程序,在啟動主機A的測試程序。
下面具體說配置文件以及測試程序:
1. 主機A的配置文件以及測試源代碼
config/ehcache_cluster.xml
- <ehcache
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -
n ="ehcache.xsd"> -
Factory -
derFactory" -
-
/> -
-
Factory -
nerFactory" -
/> -
-
maxElementsInMemory="10000" eternal="false" -
timeToLiveSeconds="120" overflowToDisk="true" -
maxElementsOnDisk="10000000" -
diskExpiryThreadInterval Seconds ="120" -
y ="LRU"> -
y -
y" /> -
-
-
name="UserCache" maxElementsInMemory="1000" eternal="false" -
timeToLiveSeconds="100000" -
-
y -
y" /> -
- </ehcache>
tutorial/UsingCacheCluster
- package
tutorial; -
- import
java.net.URL; -
- import
net.sf.ehcache.Cache; - import
net.sf.ehcache.CacheManager; - import
net.sf.ehcache.Element; -
- public
class UsingCacheCluster { -
-
static void main(String[] throwsargs) Exception { -
URL url = UsingCacheCluster. -
-
CacheManager manager = CacheManager(url); -
-
Cache cache = manager.getCache( -
Element element = Element( "key1","value1"); -
cache.put(element); -
-
Element element1 = cache.get( -
System.out.println(element1.getValue()); -
} -
- }
2.
config/ehcache_cluster.xml
- <ehcache
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -
n ="ehcache.xsd"> -
Factory -
derFactory" -
-
/> -
-
Factory -
nerFactory" -
socketTimeoutMillis=120000" /> -
-
maxElementsInMemory="10000" eternal="false" -
timeToLiveSeconds="120" overflowToDisk="true" -
maxElementsOnDisk="10000000" -
diskExpiryThreadInterval Seconds ="120" -
y ="LRU"> -
y -
y" /> -
-
-
name="UserCache" maxElementsInMemory="1000" eternal="false" -
timeToLiveSeconds="100000" -
-
y -
y" /> -
- </ehcache>
tutorial/UsingCacheCluster
- package
tutorial; -
- import
java.net.URL; -
- import
net.sf.ehcache.Cache; - import
net.sf.ehcache.CacheManager; - import
net.sf.ehcache.Element; -
- public
class UsingCacheCluster { -
-
static void main(String[] throwsargs) Exception { -
URL url = UsingCacheCluster. -
-
CacheManager manager = CacheManager(url); -
-
Cache cache = manager.getCache( -
-
{ -
Element e = cache.get( -
!= null){ -
System.out.println(e.getValue()); -
-
} -
Thread.sleep( -
} -
} -
- }
posted on 2016-06-19 00:22 youngturk 閱讀(178) 評論(0) 編輯 收藏 所屬分類: 筆試題