设置ehcache复制 - 我需要哪些多播设置?

时间:2009-05-19 20:06:36

标签: java ehcache multicast

我正在尝试设置ehcache复制,如下所示:http://ehcache.sourceforge.net/EhcacheUserGuide.html#id.s22.2
这是在Windows机器上,但最终将在生产中的Solaris上运行。

说明如下设置提供者:

 <cacheManagerPeerProviderFactory
     class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
     properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1,
     multicastGroupPort=4446, timeToLive=32"/>

这样的听众:

<cacheManagerPeerListenerFactory
    class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
    properties="hostName=localhost, port=40001,
    socketTimeoutMillis=2000"/>

我的问题是:
多播IP地址和端口是否任意(我知道地址必须在特定范围内,但它们必须是特定的数字)?
它们是否需要由我们的系统管理员以某种方式设置(我在办公室网络上)?

我想在本地测试它,所以使用上面的配置运行两个单独的tomcat实例。 我需要在每个方面做些什么改变?我知道两个听众都不能在同一个端口上听 - 但提供者怎么样? 此外,侦听器端口是否也是任意的?

我已经尝试过如上设置,但在我的测试中,缓存似乎没有被复制 - 在一个tomcat的缓存中添加的值不存在于另一个缓存中。
我可以做些什么来调试这种情况(除了数据包嗅探)?

在此先感谢您的帮助,将头发撕成了这个!

6 个答案:

答案 0 :(得分:5)

  

我想在本地测试它,所以我   运行两个单独的tomcat实例   使用上面的配置。

由于我刚刚提交了有关cherouvims related question的答案,我还想在此强调它们实际上提供了一个至少做类似事情的示例(每个主机有多个节点,但只有一个实例) :请参阅RMI Distributed Caching文档中的完整示例部分。

更改每个cacheManagerPeerListenerFactory的TCP端口确实很重要,但多播设置可以(我认为必须保持不变):您可以在ehcache.xml's内查看此操作上面提到的完整示例:端口号从40001逐个增加到每个节点40006,而多播设置保持不变。

如果您遵守了该问题,则您的问题可能与在Windows上运行的Tomcat有关 - 请参阅RMI Distributed Caching常见问题部分中的相关段落:

  

Tomcat和/或JDK中存在任何RMI侦听器的错误   如果安装路径中有空格,则无法在Tomcat上启动   [...]
  由于Windows上的默认设置是在“Program Files”中安装Tomcat,   默认情况下会发生此问题。

答案 1 :(得分:5)

在EHCache对等复制期间遇到的一个错误。这可能很有用,因此有人在单个本地盒子上尝试进行对等复制。

我想使用peerDiscovery = automatic(最终目标环境是Linux)在单个Windows Vista机器上运行3个对等复制的EhCache实例。

对等复制不起作用。奇怪的是,所有EhCache实例都在启动时没有任何错误或投诉。

我花了一些时间来弄清楚我的错误;我不得不在日志中找到任何东西:我在每个EhCache实例的对等侦听器配置中使用相同的listenerPort(40001)。使用不同的listenerPorts(40001,40002 ......)就可以了。

<cacheManagerPeerListenerFactory 
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" 
properties="port=40001, socketTimeoutMillis=3000"/>

<cacheManagerPeerListenerFactory 
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" 
properties="port=40002, socketTimeoutMillis=3000"/>

请注意,这是需要不同端口号的“对等侦听器”配置。多播“对等发现”仍然为每个ehcache实例使用相同的多播地址和端口号。

答案 2 :(得分:2)

确保您的服务器为启动器启用了多播。不确定你正在运行什么平台。

答案 3 :(得分:2)

就像快速跟进一样。

我们确实使用了两台独立的机器,解决了让它一直工作的原始问题。 据我所知,Multicast应该“开箱即用”,但值得用你的本地系统管理员检查(我们建议调整一下到multicastGroupAddress)。

我们最终遇到了Solaris上的各种问题,最终放弃了Manual Peer Discovery的多播。

最后,在调试方面,使用jconsole来监控缓存值被证明是最好的方法。不必诉诸数据包嗅探。 : - )

答案 4 :(得分:2)

 <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>

只需执行上述操作,ehcache将使用下一个可用的!因此,您不必担心要在群集中部署的新节点上进行配置。

答案 5 :(得分:1)

可以帮助某人实现多播。我已经通过在我的本地tomcat中从eclipse运行我的应用程序并在我的同事的eclipse中在本地tomcat中运行相同的应用程序来验证。

在Windows机器上运行下面会显示一些ips并确保多播可以正常工作。

netsh interface ip show joins

属性multicastGroupAddress = 230.0.0.1表示您的应用程序想要使用此IP,这可以更改,但确保仅使用D类IP范围。运行应用程序后,您可以看到此IP 230.0.0.1也如下所示 enter image description here

要查看所有魔法,请确保正确启用日志。

    <logger name="net.sf.ehcache">  <level value="debug"/></logger>
   <logger name="net.sf.ehcache.distribution.RMICachePeer" level="debug" />

确保在默认缓存或所需缓存配置中具有以下lisners

         <cacheManagerPeerProviderFactory
       class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
       properties="port=40003, peerDiscovery=automatic,
                   multicastGroupAddress=230.0.0.1,
                   multicastGroupPort=4446,
                   timeToLive=32"/>
    <cacheManagerPeerListenerFactory 
        class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
        properties="port=40001, socketTimeoutMillis=3000" />
    <cacheManagerPeerListenerFactory 
        class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" 
        properties="port=40002, socketTimeoutMillis=3000"/>
 <defaultCache
     eternal="false"
     timeToIdleSeconds="300"
     timeToLiveSeconds="300"
     diskExpiryThreadIntervalSeconds="305"
     memoryStoreEvictionPolicy="LRU"
     statistics="true">
     <persistence strategy="localTempSwap"/>
     <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
     <bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory" properties="bootstrapAsynchronously=true, maximumChunkSizeBytes=5000000"/>
        </defaultCache>

部署应用程序后,您可以在下面的日志中看到

13:31:27.073  DEBUG n.s.e.d.PayloadUtil assembleUrlList - Cache peers for this CacheManager to be advertised:......
15:15:14.110  DEBUG net.sf.ehcache.distribution.MulticastKeepaliveHeartbeatReceiver processPayload rmiUrls received....(YOur configured caches with Ips)

如果您需要配置手动对等点发现过程,这将有所帮助。