我试图建立一个可以在本地网络和同一台机器上运行的复制ehcache。我当前的配置如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<diskStore path="java.io.tmpdir"/>
<!-- clustering -->
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1, multicastGroupPort=4446, multicastPacketTimeToLive=255"
propertySeparator=","/>
<cacheManagerPeerListenerFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
properties="hostname=localhost, port=40001, socketTimeoutMillis=2000"
propertySeparator=","/>
<cache name="demo-cache"
maxEntriesLocalHeap="0"
maxEntriesLocalDisk="0"
eternal="true"
overflowToDisk="true"
maxBytesLocalHeap="10M"
diskPersistent="false"
diskSpoolBufferSizeMB="5"
clearOnFlush="false">
<cacheEventListenerFactory
class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true, replicateUpdatesViaCopy=true, replicateRemovals=true "/>
</cache>
这适用于不同的计算机,但不适用于同一台计算机上的多个实例。 我知道玩对等监听器工厂端口(40001,40002等)可能会有问题,但是我希望有一种配置在两种情况下“都能正常工作”。
答案 0 :(得分:1)
我知道这是一个老话题,但我也有类似的问题。在这种情况下,我使用如下配置:
<cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" properties="" />
答案 1 :(得分:0)
简短的回答是我不能的。 ehcache 2.5中的jgroups支持不起作用,并且对于RMI,每个节点都需要自己的端口。
我最终做的是从xml创建conf,从对等侦听器工厂的属性字段中解析端口并运行创建ServerSockets的循环,直到找到一个空闲端口(意味着ServerSocket构造函数不会抛出异常)并使用它。 它的丑陋但它的作用
答案 2 :(得分:0)
在cacheManagerPeerListenerFactory中尝试使用主机名= localhost y端口= 0。应该可以。
如果将端口设置为0,则RMICacheManagerPeerListenerFactory将为同一端口分配不同的随机端口。