2009-08-21 2 views
4

Ich führe 2 Tomcat-Instanzen auf dem gleichen Host. Jede Instanz führt dieselbe Webanwendung aus, die versucht, einige E-Cache-Caches über die RMI-Replikation zu übertragen. Ich verwende die Autodiscovery-Konfiguration in ehcache, so dass ich nicht explizit definieren muss, welche Hosts und welche Caches ich replizieren möchte. Die ehcache Instanzen nicht gelingen, sich zu finden und kommunizieren:ehcache automatische Erkennung (über Multicast) zwischen 2 Instanzen auf dem gleichen Host

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. 

Wenn ich das Gleiche versuchen, aber diesmal jede tomcat Instanz auf einem separaten Host (box) läuft dann funktioniert alles wie am Schnürchen.

Mache ich etwas falsch, oder ist Autodiscovery über Multicast nicht möglich, wenn sich die Instanzen auf demselben Host befinden?

Meine Konfiguration verwendet die präsentierten Ausfälle im RMI Distributed Caching documentation:

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

Und in jedem Cache-Bereich I replizierenden ich habe:

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

dank

Antwort

4

Bin ich tun etwas falsch, oder ist nicht Autodiscovery über Multicast möglich Wenn die Instanzen auf dem gleichen Host sind?

Während ich bin nicht wirklich vertraut mit ehcache Ich denke, würde dies möglich ist, und sie sind in der Tat bietet ein Beispiel ähnlich, etwas zu tun zumindest (mehrere Knoten pro Host, wenn eine Instanz beschränkt): siehe Abschnitt Volles Beispiel in der RMI Distributed Caching Dokumentation, die Sie erwähnten.

Normalerweise können Sie nicht den gleichen TCP-Port (40001 hier) mehr als einmal pro Host öffnen, aber er ist an die erste Anwendung/den Dienst gebunden (es gibt Dinge wie TCP Port Sharing unter Windows zum Beispiel), aber Sie würden muss das konkret erklären).

Wenn Sie also ihre identischen Standardkonfigurationen verwenden, kann die zweite Tomcat-Instanz, die den TCP-Port 40001 zuweisen möchte, dies nicht tun. Natürlich sollte sich das irgendwo früher in den Tomcat-Logs manifestieren, hast du schon mal genau hingesehen?

Wenn Sie einen anderen freien Port für eine Tomcat-Instanz verwenden, sollte das Problem gelöst werden. Sie können dies in Aktion in der ehcache.xml's für die Volle Beispiel oben erwähnt sehen: die Portnummer wird eins nach dem anderen von 40001 bis 40006 pro Knoten erhöht.

+0

Das war es. Es gab eine Port-Kollision, aber keine WARN oder ERROR in den Logs (und ich habe alles auf Stufe ALL gesetzt). Danke vielmals!!! – cherouvim

Verwandte Themen