使用单个配置在同一台机器上运行多个ehcache实例

时间:2011-12-13 05:28:32

标签: java ehcache

我试图建立一个可以在本地网络和同一台机器上运行的复制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等)可能会有问题,但是我希望有一种配置在两种情况下“都能正常工作”。

3 个答案:

答案 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将为同一端口分配不同的随机端口。