我正在尝试设置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的缓存中添加的值不存在于另一个缓存中。
我可以做些什么来调试这种情况(除了数据包嗅探)?
在此先感谢您的帮助,将头发撕成了这个!
答案 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也如下所示
要查看所有魔法,请确保正确启用日志。
<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)
如果您需要配置手动对等点发现过程,这将有所帮助。