автообнаружение ehcache (через многоадресную передачу) между двумя экземплярами на одном хосте - PullRequest
5 голосов
/ 21 августа 2009

Я запускаю 2 экземпляра tomcat на одном хосте. Каждый экземпляр запускает одно и то же веб-приложение, которое пытается передать некоторые кэши ehcache через репликацию RMI. Я использую конфигурацию автообнаружения в 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 Distributed Caching :

<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" />

спасибо

1 Ответ

5 голосов
/ 24 августа 2009

Я делаю что-то не так или нет возможно автообнаружение через многоадресную рассылку когда экземпляры находятся на том же хозяйничать?

Хотя я не очень знаком с ehcache, я думаю, что это возможно, и они фактически предоставляют пример, делающий что-то похожее, по крайней мере (несколько узлов на хост, хотя только один экземпляр): see section Полный пример в документации RMI Distributed Caching , которую вы упомянули.

Обычно вы не можете открывать один и тот же порт TCP (здесь 40001) более одного раза для каждого хоста, хотя он привязан к первому приложению / службе, выделяющему его (существуют такие вещи, как Общий доступ к портам TCP в Windows например, но вам придется специально учесть это).

Следовательно, если вы действительно используете их идентичные конфигурации по умолчанию, второй экземпляр Tomcat, пытающийся выделить TCP-порт 40001, не сможет это сделать. Конечно, это должно проявиться где-то ранее в журналах Tomcat, вы уже тщательно изучили?

Простое использование другого свободного порта для одного экземпляра Tomcat должно решить проблему; Вы можете увидеть это в действии в ehcache.xml для Полный пример , упомянутый выше: номер порта увеличивается один за другим с 40001 до 40006 на узел.

...