2017-02-23 12 views
0

테라코타 클러스터와 함께 OSS Ehcache를 사용하려고하지만 ehcache 클라이언트 측에서 페일 오버를 구현하지 못했습니다. 문서 here테라코타에서 ehcache 클라이언트 페일 오버

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

에 명시된하지만이 연결이 하나의 URL을 허용으로

나는이 구성을 찾을 수 있습니다. 클러스터에 두 개의 테라코타 서버가있는 경우 페일 오버가있는 HA를 갖고 싶습니다. ActiveMQ를 장애 조치 URL을 같은 일 :

failover:(server1:port,server2:port) 

내 질문은 : 오픈 소스으로 Ehcache에 가능성이있다, 또는 나는 엔터프라이즈 버전을해야하고, 가능하면, 그것을 구성하는 방법.

내가주는 올바르게 구문 분석하지 않았다, Louis Jacomet 언급하지만 같은 <terracotta:connection url="terracotta://host1:9510,host2:9610/clustered1"/> 을 시도

업데이트 : 잘 컴파일 <terracotta:connection url="terracotta://host1:9510/clustered1,host2:9610/clustered1"/>을하려고하면

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'. 

하지만 host1의 경우이 다운되면 클라이언트는 다음을 제공합니다.

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 버전 : Ehcache-clustered-3.2

답변

1

이 기능은 오픈 소스 제품에 포함되어 있으며 아무런 문제가 없습니다.

당신은 같이 거기에 여러 server:port를 나열해야합니다

모든 서버 목록
<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> 

갈 권장되는 방법입니다, 그렇지 않으면 당신은 장애 조치 로직의 매우 정확한 이해가 필요합니다.

+0

감사합니다. 컴파일이 완료되었지만 첫 번째 서버가 다운되었을 때 failover가 성공하지 못했으며 connectionException이 발생했습니다.

+0

귀하의 URL이 내가 제공 한 예와 일치하지 않습니다. path 요소가 동일하게 유지되어야하므로 경로 앞에 서 v를] 복하십시오. 그래서'terracotta : // localhost : 9610/clustered1, localhost : 9510/c lustered0'은'terracotta : // localhost : 9610, localhost : 9510/clustered '가되어야합니다. –

+0

테라코타를 사용했습니다 : // host1 : 9510 , host2 : 9510/clustered, xml 구문 분석에 실패했습니다. XmlConfigurationException, 호스트 이름 대신 IP를 사용합니다. –