автоматическое обнаружение ehcache (через многоадресную рассылку) между двумя экземплярами на одном хосте

Я запускаю 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" />

Благодарность


person cherouvim    schedule 21.08.2009    source источник


Ответы (1)


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

Хотя я не совсем знаком с ehcache, я думаю, что это возможно, и на самом деле они предоставляют пример, делающий как минимум что-то подобное (несколько узлов на хост, хотя и только один экземпляр): см. раздел Полный пример< /em> в документации по Распределенное кэширование RMI. упомянул.

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

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

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

person Steffen Opel    schedule 24.08.2009
comment
Вот оно. Произошла коллизия портов, но в журналах нет ни ПРЕДУПРЕЖДЕНИЙ, ни ОШИБОК (и у меня все установлено на уровень ВСЕ). Большое спасибо!!! - person cherouvim; 25.08.2009