Frage

Ich versuche ehcache Replikation einzurichten, wie hier dokumentiert: http: // ehcache.sourceforge.net/EhcacheUserGuide.html#id.s22.2
Dies ist auf einem Windows aber letztlich auf Solaris in der Produktion führen.

Die Anweisungen sagen, einen Anbieter setzen sich wie folgt zusammen:

 <cacheManagerPeerProviderFactory
     class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
     properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1,
     multicastGroupPort=4446, timeToLive=32"/>

Und ein Zuhörer wie folgt aus:

<cacheManagerPeerListenerFactory
    class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
    properties="hostName=localhost, port=40001,
    socketTimeoutMillis=2000"/>

Meine Fragen sind:
Sind die Multicast-IP-Adresse und Port willkürlich (ich weiß die Adresse innerhalb eines bestimmten Bereichs zu leben hat, aber tun sie bestimmte Zahlen sein müssen)?
Müssen sie in irgendeiner Weise von unseren Systemadministrator (Ich bin auf einem Büronetz) eingerichtet werden soll?

Ich möchte es testen lokal so zwei Instanzen getrennt Kater mit dem oben Config leite. Was muss ich in jedem ändern? Ich weiß, dass sowohl die Zuhörer können auf dem gleichen Port nicht hören - aber was ist mit dem Anbieter
? Auch sind die Zuhörer Ports willkürlich auch?

Ich habe versucht, es wie oben Einrichtung aber in meinem die Caches Prüfung erscheinen nicht repliziert werden -. Der Wert in einer tomcat-Cache hinzugefügt wird, im anderen Cache nicht vorhanden
Gibt es etwas, was ich tun kann, diese Situation (andere als Packet Sniffing) zu debuggen?

Vielen Dank im Voraus für jede Hilfe, wird reißt meine Haare über diese heraus!

War es hilfreich?

Lösung

  

Ich mag es testen lokal so bin   zwei getrennte Instanzen tomcat   mit der obigen Konfiguration.

Wie ich nur eine Antwort in Bezug auf cherouvims eingereicht Frage im Zusammenhang ich gerade auch hier hervorheben, dass sie in der Tat bietet ein Beispiel etwas ähnliches zumindest (mehrere Knoten pro Host, wenn eine Instanz nur) tun: siehe Abschnitt Voll Beispiel in der RMI Distributed Caching Dokumentation.

Es ist in der Tat wichtig, den TCP-Port für jeden cacheManagerPeerListenerFactory zu ändern, aber die Multicast-Einstellungen können (ich glaube, würde sie müssen) gleich bleiben: Sie dies in Aktion innerhalb der ehcache.xml des für die Voll Beispiel oben erwähnt :. die Portnummer bis zu 40.006 pro Knoten nacheinander von 40.001 erhöht, während die Multicast-Einstellungen identisch bleiben

Wenn Sie gehorchten, dass Ihr Problem könnte nur auf Tomcat bezogen werden unter Windows ausgeführt wird - siehe den entsprechenden Abschnitt im Abschnitt Häufige Probleme in RMI Distributed Caching :

  

Es gibt einen Fehler in Tomcat und / oder das JDK, wo jeder RMI Zuhörer   nicht auf Tomcat starten, wenn der Installationspfad Leerzeichen enthält.
  [...]
  Da der Standard unter Windows ist Tomcat in „Program Files“ zu installieren,   Dieses Problem standardmäßig auftreten wird.

Andere Tipps

Ein Fehler, den ich während EHCache Peer-Replikation auftreten. Dies könnte nützlich sein, so dass jemand Peer-Replikation auf einem einzelnen lokalen Box versuchen.

I 3 Peer-replizierten Instanzen von ehcache auf einer einzelnen Windows Vista-Box mit peerDiscovery = automatisch (die späteren Zielumgebung war Linux) laufen wollte.

Die Peer-Replikation hat nicht funktioniert. Merkwürdig ist, wurden alle ehcache Instanzen ohne Fehler oder Beschwerden in der Log-Start-up.

dauerte eine Weile, mein Fehler auf Figur; ohne irgendetwas in den Protokollen hatte ich um grok: Ich habe das gleiche listenerPort wurde mit (40001) in der Peer-Listener-Konfiguration für jede der ehcache Instanzen. Mit verschiedenen listenerPorts (40001, 40002 ...) hat den Trick.

<cacheManagerPeerListenerFactory 
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" 
properties="port=40001, socketTimeoutMillis=3000"/>

<cacheManagerPeerListenerFactory 
class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" 
properties="port=40002, socketTimeoutMillis=3000"/>

Beachten Sie, dass dies die "Peer Zuhörer Konfiguration, die unterschiedlichen Portnummern benötigt. Der Multicast-Peer Discovery 'noch verwendet identische Multicast-Adresse und Port-Nummern für jede ehcache Instanz.

Stellen Sie sicher, dass Ihre Server Multicast für Starter aktiviert haben. Nicht sicher, welche Plattform Sie läuft.

Wie schnell Follow-up.

Wir haben diese Arbeit mit zwei getrennten Maschinen erhalten, die das ursprüngliche Problem des Erhaltens es gelöst überhaupt zu arbeiten. Soweit ich Multicast erinnern sollte „out of the box“ arbeiten, aber es lohnt sich bei Ihrem lokalen Sysadmin Kontrolle (unsere ein zwicken zum multicastGroupAddress vorgeschlagen).

Wir treffen schließlich alle möglichen Probleme auf Solaris und für die Aufgabe Multicast endete Handbuch Peer Entdeckung statt.

Schließlich wird in Bezug auf die Fehlersuche, jconsole mit Cache-Werte zu überwachen, erwies sich als der beste Weg, um es zu tun. Haben Sie nicht zu Packet Sniffing greifen. : -)

 <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>

nur die oben ehcache tun die nächsten verfügbaren nutzen! So müssen Sie im Cluster implementieren keine Sorgen über Konfiguration auf neue Knoten, die Sie wollen.

Kann jemand Umsetzung helfen Multicast. Ich habe, indem Sie meine app in meinem lokalen Kater von Eclipse und läuft die gleiche Anwendung in dem lokalen Kater von Eclipse meines Kollegen verifiziert.

unten Laufen auf Ihrem Windows-Rechner finden Sie einige ips zeigen und stellt sicher, dass Multi-Casting funktionieren sollte.

netsh interface ip show joins

das Attribut multicastGroupAddress = 230.0.0.1 bedeutet, dass Ihre Anwendung diese IP verwenden, dies kann geändert werden aber sicher, nur den Klasse-D-IP-Bereich zu verwenden. Nachdem die Anwendung ausgeführt wird, können Sie diese IP 230.0.0.1 Siehe auch, wie unten in eingeben Bild Beschreibung hier

Um alle magics zu sehen, stellen Sie sicher Protokolle ordnungsgemäß zu ermöglichen.

    <logger name="net.sf.ehcache">  <level value="debug"/></logger>
   <logger name="net.sf.ehcache.distribution.RMICachePeer" level="debug" />

Stellen Sie sicher, unten lisners in Ihren Standard-Cache oder erforderlich Cache-Konfiguration haben

         <cacheManagerPeerProviderFactory
       class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
       properties="port=40003, peerDiscovery=automatic,
                   multicastGroupAddress=230.0.0.1,
                   multicastGroupPort=4446,
                   timeToLive=32"/>
    <cacheManagerPeerListenerFactory 
        class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
        properties="port=40001, socketTimeoutMillis=3000" />
    <cacheManagerPeerListenerFactory 
        class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" 
        properties="port=40002, socketTimeoutMillis=3000"/>
 <defaultCache
     eternal="false"
     timeToIdleSeconds="300"
     timeToLiveSeconds="300"
     diskExpiryThreadIntervalSeconds="305"
     memoryStoreEvictionPolicy="LRU"
     statistics="true">
     <persistence strategy="localTempSwap"/>
     <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
     <bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory" properties="bootstrapAsynchronously=true, maximumChunkSizeBytes=5000000"/>
        </defaultCache>

Nach der Anwendung Bereitstellen Sie in Protokollen siehe unten könnten

13:31:27.073  DEBUG n.s.e.d.PayloadUtil assembleUrlList - Cache peers for this CacheManager to be advertised:......
15:15:14.110  DEBUG net.sf.ehcache.distribution.MulticastKeepaliveHeartbeatReceiver processPayload rmiUrls received....(YOur configured caches with Ips)

Welche hilfreich sein, wenn Sie die manuellen Peer Discovery-Prozess konfigurieren müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top