同一主机上的 2 个实例之间的 ehcache 自动发现(通过多播)

2024-01-13

我在同一主机上运行 2 个 tomcat 实例。每个实例都运行相同的 Web 应用程序,该应用程序尝试通过 RMI 复制与某些 ehcache 缓存进行通信。我在 ehcache 中使用自动发现配置,因此不必显式定义哪些是主机以及哪些是我想要复制的缓存。 ehcache 实例无法找到彼此并进行通信:

DEBUG (RMIBootstrapCacheLoader.java:211) - cache peers: []
DEBUG (RMIBootstrapCacheLoader.java:133) - Empty list of cache peers for cache org.hibernate.cache.UpdateTimestampsCache. No cache peer to bootstrap from.

如果我尝试同样的事情,但这次在单独的主机(盒子)上运行每个 tomcat 实例,那么一切都会像魅力一样工作。

我是否做错了什么,或者当实例位于同一主机上时,无法通过多播进行自动发现?

我的配置使用中提供的默认值RMI 分布式缓存文档 http://ehcache.org/documentation/distributed_caching_with_rmi.html:

<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="port=40001, socketTimeoutMillis=2000"/>

在我想要复制的每个缓存区域内,我有:

<cacheEventListenerFactory
        class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" 
        properties="asynchronousReplicationIntervalMillis=500 " />
<bootstrapCacheLoaderFactory 
        class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory" />

thanks


我做错了什么吗? 可以通过多播自动发现 当实例处于同一位置时 主持人?

虽然我不太熟悉 ehcache,但我认为这是可能的,而且他们实际上提供了一个至少执行类似操作的示例(每个主机多个节点,尽管只有一个实例):请参阅部分完整示例 in the RMI分布式缓存 http://www.ehcache.org/documentation/2.7/replication/rmi-replicated-caching.html你提到的文档。

通常,每个主机不能多次打开同一个 TCP 端口(此处为 40001),但它绑定到分配它的第一个应用程序/服务(确实存在诸如TCP端口共享 http://technet.microsoft.com/en-us/library/cc772001.aspx例如在 Windows 上,但您必须专门考虑这一点)。

因此,如果您确实使用相同的默认配置,则尝试分配 TCP 端口 40001 的第二个 Tomcat 实例将失败。当然,这应该在 Tomcat 日志的较早位置体现出来,您已经彻底查看过了吗?

只需为一个 Tomcat 实例使用另一个空闲端口即可解决该问题;你可以在ehcache.xml 的 http://ehcache.svn.sourceforge.net/viewvc/ehcache/trunk/core/src/test/resources/distribution/为了完整示例上面提到:每个节点的端口号从40001一一增加到40006。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

同一主机上的 2 个实例之间的 ehcache 自动发现(通过多播) 的相关文章

随机推荐