EhCache 从 1.5. 版本开始增加了 JGroups 的分布式集群模式。与 RMI 方式相比较, JGroups 提供了一个非常灵活的协议栈、可靠的单播和多播消息传输,主要的缺点是配置复杂以及一些协议栈对第三方包的依赖。
JGroups 也提供了基于 TCP 的单播 ( Unicast ) 和基于 UDP 的多播 ( Multicast ) ,对应 RMI 的手工配置和自动发现。使用单播方式需要指定其它节点的主机地址和端口,下面是两个节点,并使用了单播方式的配置:
[html] view plain copy
print
?
1. <!-- 使用单播方式配置 -->
2. <cacheManagerPeerProviderFactory
3. class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
4. properties="connect=TCP(bind_addr=127.0.0.1;bind_port=4000):
5. initial_hosts=127.0.0.1[4000],127.0.0.1[5000];port_range=1;timeout=5000;num_initial_members=2):
6. min_interval=3000;max_interval=5000):
7. interval=5000;timeout=20000):
8. timeout=5000;max_tries=48;):
9. timeout=1500):
10. retransmit_timeout=100,200,300,600,1200,2400,4800;discard_delivered_msgs=true):
11. stability_delay=1000;desired_avg_gossip=20000;max_bytes=0):
12. print_local_addr=true;join_timeout=5000)"
13. propertySeparator="::" />
使用多播方式配置如下:
[html] view plain copy
print
?
1. <cacheManagerPeerProviderFactory
2. class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
3. properties="connect=UDP(mcast_addr=224.1.1.1;mcast_port=45678;ip_ttl=32;mcast_send_buf_size=120000;mcast_recv_buf_size=80000):
4. timeout=2000;num_initial_members=2):
5. min_interval=5000;max_interval=10000):
6. timeout=1500):
7. retransmit_timeout=3000):
8. timeout=5000):
9. desired_avg_gossip=20000):
10. FRAG:
11. join_timeout=5000;print_local_addr=true)"
12. propertySeparator="::" />
cache缓存节点配置
[html] view plain copy
print
?
- <
1. !-- demo缓存 -->
2. <cache name="demoCache" maxElementsInMemory="1000" eternal="false"
3. timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"
4. diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000"
5. diskPersistent="false" diskExpiryThreadIntervalSeconds="120"
6. memoryStoreEvictionPolicy="LRU">
7. <cacheEventListenerFactory
8. class="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"
9. properties="replicateAsynchronously=true, replicatePuts=true,
10. replicateUpdates=true, replicateUpdatesViaCopy=false, replicateRemovals=true" />
11. <!-- 用于在初始化缓存,以及自动设置 -->
12. <bootstrapCacheLoaderFactory
13. class="net.sf.ehcache.distribution.jgroups.JGroupsBootstrapCacheLoaderFactory" />
14. </cache>
需要引入依赖:
[html] view plain copy
print
?
1. <dependency>
2. <groupId>net.sf.ehcache</groupId>
3. <artifactId>ehcache-jgroupsreplication</artifactId>
4. <version>1.7</version>
5. </dependency>
EhCache 从 1.5. 版本开始增加了 JGroups 的分布式集群模式。与 RMI 方式相比较, JGroups 提供了一个非常灵活的协议栈、可靠的单播和多播消息传输,主要的缺点是配置复杂以及一些协议栈对第三方包的依赖。
JGroups 也提供了基于 TCP 的单播 ( Unicast ) 和基于 UDP 的多播 ( Multicast ) ,对应 RMI 的手工配置和自动发现。使用单播方式需要指定其它节点的主机地址和端口,下面是两个节点,并使用了单播方式的配置:
[html] view plain copy
print
?
1. <!-- 使用单播方式配置 -->
2. <cacheManagerPeerProviderFactory
3. class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
4. properties="connect=TCP(bind_addr=127.0.0.1;bind_port=4000):
5. initial_hosts=127.0.0.1[4000],127.0.0.1[5000];port_range=1;timeout=5000;num_initial_members=2):
6. min_interval=3000;max_interval=5000):
7. interval=5000;timeout=20000):
8. timeout=5000;max_tries=48;):
9. timeout=1500):
10. retransmit_timeout=100,200,300,600,1200,2400,4800;discard_delivered_msgs=true):
11. stability_delay=1000;desired_avg_gossip=20000;max_bytes=0):
12. print_local_addr=true;join_timeout=5000)"
13. propertySeparator="::" />
使用多播方式配置如下:
[html] view plain copy
print
?
1. <cacheManagerPeerProviderFactory
2. class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
3. properties="connect=UDP(mcast_addr=224.1.1.1;mcast_port=45678;ip_ttl=32;mcast_send_buf_size=120000;mcast_recv_buf_size=80000):
4. timeout=2000;num_initial_members=2):
5. min_interval=5000;max_interval=10000):
6. timeout=1500):
7. retransmit_timeout=3000):
8. timeout=5000):
9. desired_avg_gossip=20000):
10. FRAG:
11. join_timeout=5000;print_local_addr=true)"
12. propertySeparator="::" />
cache缓存节点配置
[html] view plain copy
print
?
1. <!-- demo缓存 -->
2. <cache name="demoCache" maxElementsInMemory="1000" eternal="false"
3. timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"
4. diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000"
5. diskPersistent="false" diskExpiryThreadIntervalSeconds="120"
6. memoryStoreEvictionPolicy="LRU">
7. <cacheEventListenerFactory
8. class="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"
9. properties="replicateAsynchronously=true, replicatePuts=true,
10. replicateUpdates=true, replicateUpdatesViaCopy=false, replicateRemovals=true" />
11. <!-- 用于在初始化缓存,以及自动设置 -->
12. <bootstrapCacheLoaderFactory
13. class="net.sf.ehcache.distribution.jgroups.JGroupsBootstrapCacheLoaderFactory" />
14. </cache>
需要引入依赖:
[html] view plain copy
print
?
1. <dependency>
2. <groupId>net.sf.ehcache</groupId>
3. <artifactId>ehcache-jgroupsreplication</artifactId>
4. <version>1.7</version>
5. </dependency>