2017-02-23 2 views
0

Ich versuche, OSS Ehcache mit Terrakotta-Cluster zu verwenden, konnte jedoch Failover von der Ehcache-Client-Seite nicht implementieren.Ehcache Client-Failover auf Terrakotta

Ich finde diese Konfiguration wie in der Dokumentation angegeben here

<ehcache:service> 
<terracotta:cluster> 
    <terracotta:connection url="terracotta://localhost:9510/clustered"/> 
    <terracotta:server-side-config auto-create="true"> 
    <terracotta:default-resource from="default-resource"/> 
    </terracotta:server-side-config> 
</terracotta:cluster> 
</ehcache:service>  

aber diese Verbindung akzeptiert nur einen URL. Ich möchte HA mit Failover haben, wenn ich zwei Terrakotta-Server in einem Cluster habe. etwas wie ActiveMQ Failover url:

failover:(server1:port,server2:port) 

Meine Frage: Ist das möglich in Open-Source-ehcache, oder ich werde die Enterprise-Version haben müssen, und es ist möglich, wenn, wie das konfigurieren.

aktualisieren

Ich versuchte <terracotta:connection url="terracotta://host1:9510,host2:9610/clustered1"/> von Louis Jacomet erwähnt, wie aber, die nicht korrekt analysiert haben, geben:

org.ehcache.xml.exceptions.XmlConfigurationException: Error parsing XML configuration at file:/F:/Work/WORKSPACES/java7_ws/CachingTest/target/classes/ehcache.xml 
    at org.ehcache.xml.XmlConfiguration.<init>(XmlConfiguration.java:167) 
    at org.ehcache.xml.XmlConfiguration.<init>(XmlConfiguration.java:131) 
    at org.ehcache.jsr107.EhcacheCachingProvider$ConfigSupplier.getConfiguration(EhcacheCachingProvider.java:324) 
    ... 4 more 
Caused by: org.xml.sax.SAXParseException; systemId: file:/F:/Work/WORKSPACES/java7_ws/CachingTest/target/classes/ehcache.xml; lineNumber: 12; columnNumber: 91; cvc-pattern-valid: Value 'terracotta://host1:9510,host2:9610/clustered1' is not facet-valid with respect to pattern '\w+://([^\]\[/?#@][email protected])?[^:?#/]+(:[1-9][0-9]{0,4})?(/[^\?#]*)?(\?[^#]*)?(#.*)?' for type 'connectionUrl'. 

Wenn ich <terracotta:connection url="terracotta://host1:9510/clustered1,host2:9610/clustered1"/> versuchen, die gut kompiliert, aber wenn host1 geht nach unten, der Client gibt:

Exception in thread "main" org.ehcache.StateTransitionException: org.terracotta.connection.ConnectionException: java.util.concurrent.TimeoutException 
    at org.ehcache.core.StatusTransitioner$Transition.failed(StatusTransitioner.java:235) 
    at org.ehcache.core.EhcacheManager.init(EhcacheManager.java:588) 
    at org.ehcache.jsr107.EhcacheCachingProvider.createCacheManager(EhcacheCachingProvider.java:148) 
    at org.ehcache.jsr107.EhcacheCachingProvider.getCacheManager(EhcacheCachingProvider.java:128) 
    at org.ehcache.jsr107.EhcacheCachingProvider.getCacheManager(EhcacheCachingProvider.java:79) 
    at org.ehcache.jsr107.EhcacheCachingProvider.getCacheManager(EhcacheCachingProvider.java:183) 
    at dev.ams.poc.CacheApp.main(CacheApp.java:15) 
Caused by: java.lang.RuntimeException: org.terracotta.connection.ConnectionException: java.util.concurrent.TimeoutException 
    at org.ehcache.clustered.client.internal.service.DefaultClusteringService.initClusterConnection(DefaultClusteringService.java:189) 
    at org.ehcache.clustered.client.internal.service.DefaultClusteringService.start(DefaultClusteringService.java:140) 
    at org.ehcache.core.internal.service.ServiceLocator.startAllServices(ServiceLocator.java:118) 
    at org.ehcache.core.EhcacheManager.init(EhcacheManager.java:560) 
    ... 5 more 

Ehcache-Version: Ehcache-Clustered-3.2

Antwort

1

Diese Funktion ist Teil des Open-Source-Angebots, kein Problem dort.

Sie benötigen die mehrere server:port dort zu verzeichnen, wie in:

<ehcache:service> 
    <terracotta:cluster> 
    <terracotta:connection url="terracotta://localhost:9510,otherhost:9510/clustered"/> 
    <terracotta:server-side-config auto-create="true"> 
     <terracotta:default-resource from="default-resource"/> 
    </terracotta:server-side-config> 
    </terracotta:cluster> 
</ehcache:service> 

Auflisten aller Server ist die empfohlene Weg zu gehen, sonst müssen Sie ein sehr genaues Verständnis der Failover-Logik.

+0

Vielen Dank, ich habe versucht, wie Sie sagten, es ist kompiliert, aber Failover ist nicht erfolgreich, wenn der erste Server ausgefallen ist und connectionException ausgelöst:

+0

Ihre URL stimmt nicht mit dem Beispiel überein, das ich angegeben habe. Sie wiederholen die Server vor dem Pfad, da das Pfadelement gleich bleiben muss. Also 'Terrakotta: // localhost: 9610/clustered1, localhost: 9510/c lustered0' muss 'terracotta: // localhost: 9610, localhost: 9510/c glutrot' werden –

+0

Ich habe terracotta: // host1: 9510 verwendet , host2: 9510/geclustert, aber das scheiterte bei der XML-Analyse. Geben Sie dazu Folgendes ein: XmlConfigurationException, Ich verwende IPs anstelle von Hostnamen. –