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

我在同一台主机上运行了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分布式缓存文档中提供的默认值:

   

在我希望复制的每个缓存区域内,我有:

   

谢谢

我是做错了什么,或者当实例在同一主机上时,不能通过多播进行自动发现?

虽然我对ehcache并不熟悉,但我认为这是可能的,它们实际上提供了一个至少做类似事情的示例(每个主机有多个节点,但只有一个实例):请参阅RMI分布式中的完整示例部分您提到的缓存文档。

通常你不能在每个主机上多次打开相同的TCP端口(这里是40001),它被绑定到第一个分配它的应用程序/服务(例如,在Windows上存在诸如TCP端口共享之类的东西,但你必须特别考虑到这一点)。

因此,如果您确实使用相同的默认配置,则尝试分配TCP端口40001的第二个Tomcat实例将无法执行此操作。 当然,这应该在Tomcat日志的早期某个地方表现出来,你已经看过了吗?

只为一个Tomcat实例使用另一个空闲端口就可以解决问题; 您可以在上面提到的完整示例的ehcache.xml中看到这个:端口号从40001逐个增加到每个节点40006。