10

我正在尝试设置 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 的缓存中添加的值在另一个缓存中不存在。
我可以做些什么来调试这种情况(数据包嗅探除外)?

在此先感谢您的帮助,一直在为这个而烦恼!

4

6 回答 6

5

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

因为我刚刚提交了有关 cherouvims相关问题的答案,所以我也想在这里强调一下,它们实际上提供了一个至少做类似事情的示例(每个主机有多个节点,尽管只有一个实例):请参阅完整示例中的部分RMI 分布式缓存文档。

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

如果您遵守了这一点,您的问题可能只是与在 Windows 上运行的 Tomcat 有关 - 请参阅RMI 分布式缓存中的常见问题部分中的相关段落:

Tomcat 和/或 JDK 中存在一个错误,如果安装路径中有空格,则任何 RMI 侦听器都将无法在 Tomcat 上启动。
[...]
由于 Windows 上的默认设置是在“程序文件”中安装 Tomcat,因此默认情况下会出现此问题。

于 2009-08-24T16:09:43.863 回答
5

我在 EHCache 对等复制过程中遇到的一个错误。这可能很有用,因此有人尝试在单个本地机器上进行对等复制。

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

对等复制不起作用。奇怪的是,所有 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 实例使用相同的多播地址和端口号。

于 2010-04-22T08:39:39.550 回答
2

确保您的服务器为初学者启用了多播。不确定您在哪个平台上运行。

于 2009-05-19T20:34:41.563 回答
2

就像快速跟进一样。

我们确实使用两台独立的机器来解决这个问题,这完全解决了让它工作的原始问题。据我记得多播应该“开箱即用”,但值得与您当地的系统管理员核实(我们建议对多播组地址进行调整)。

我们最终在 Solaris 上遇到了各种各样的问题,最终放弃了多播,转而使用手动对等发现。

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

于 2009-08-27T10:32:35.087 回答
2
 <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>

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

于 2010-05-27T18:45:27.547 回答
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" />

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

         <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)

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

于 2017-08-15T15:21:07.453 回答