2016-03-21 5 views
0

Wir verfügen über eine Spring-Mvc-Anwendung (Client), über die eine Verbindung zu zwei verschiedenen verteilten Gemfire-Systemen und exponierten Daten über REST-Dienste hergestellt wird. Beim Bootstrapping der Spring-Mvc-Anwendung erhalten wir eine Ausnahme, dass es keine Verbindung zu zwei verteilten Systemen herstellen kann: Wir haben zwei Client-Caches in unserer Konfiguration definiert, die ein Problem verursachen, aber wir müssen eine Verbindung zu zwei verteilten Systemen herstellen. Wie können wir diesen Fehler beheben? Wir haben zwei Client-Cache-Tags in der Servlet-XML definiert, die ein Problem verursachen.In dieser VM gibt es bereits eine Verbindung zu einem verteilten System

Antwort

0

Wesentlichen sowohl die GemFire ​​DistributedSystem und die ClientCache sind Singletons in einem einzigen JVM Prozess, und es ist nicht möglich, 2 verschiedene Client-Cache-Speicher in der gleichen JVM zu haben, mit signifikant unterschiedlichen DistributedSystem Konfigurationen.

Ich habe von Kunden gehört, die einen einzelnen Client-Cache verwenden, der mit zwei verschiedenen GemFire-Clustern verbunden ist (d. H. DistributedSystems), obwohl ich nicht sicher bin, ob dies tatsächlich empfohlen wird.

Sie könnten Folgendes versuchen. Angenommen, Sie haben zwei Cluster ...

Cluster 1: Locator A, Server B, Server C 

Cluster 2: Locator Z, Server X, Server Y. 

Sie dann in der Lage sein könnten, wie so ...

<gfe:client-cache/> 

<gfe:pool id="clusterOnePool" ... > 
    <gfe:locator host="LocatorA-Host/IP" port="LocatorA-Port"/> 
</gfe:pool> 

<gfe:pool id="clusterTwoPool" ...> 
    <gfe:locator host="LocatorZ-Host/IP" port="LocatorZ-Port"/> 
</gfe:pool> 

<gfe:client-region id="RegionInClusterOne" shortcut="[PROXY|CACHING_PROXY]" 
        pool-name="clusterOnePool"> 
    ... 
</gfe:client-region> 

<gfe:client-region id="RegionInClusterTwo" shortcut="[PROXY|CACHING_PROXY]" 
        pool-name="clusterTwoPool"> 
    ... 
</gfe:client-region> 

Ich bin nicht sicher, ob das funktioniert, aber vielleicht einen einzigen Cache mit 2 Pools zu erstellen . Ich bin mir auch nicht sicher, ob das auch wirklich empfohlen wird.

Was ist Ihre UC für die Verbindung von Clients mit 2 verschiedenen Clustern?

+0

Hinweis, ich habe hier ein Beispiel dafür erstellt (https://github.com/jxblum/spring-gemfire-tests/blob/master/src/test/java/org/spring/data/gemfire/cache/ ClientCacheConnectedToMultipleDistributedSystemsTest.java) Zuerst müssen Sie in Ihrer IDE Laufkonfigurationen für die 2 GemFire ​​Server-Konfigurationen (GemFireServerAppOne und GemFireServerAppTwo) einrichten. Sobald die Server ausgeführt werden, können Sie den Test ausführen. Beachten Sie auch, dass die 2 Server nicht an demselben DS teilnehmen. Sie sind getrennt und obwohl sie eigenständig sind, repräsentieren sie wirklich 2 Cluster (mit je 1 Mitglied). –

+0

Hallo John, als ich die obige Konfiguration versuchte, bekam ich einen Fehler NoUniquieBeanDefinitionException: Keine qualifizierende Bohne vom Typ com.gemstone.gemfire.cache.client.Pool –

+0

verursacht durch: org.springframework.beans.factory.BeanCreationException: Error creating bean mit name 'gemfireCache': FactoryBean hat eine Exception bei der Objekterstellung geworfen; n Die Ausnahme von ested ist org.springframework.beans.factory.BeanInitializationException: Keine Bean des Typs 'com.gemstone.gemfire.cache.client.Pool' mit dem Namen 'null' wurde gefunden .; verschachtelte Ausnahme ist org.springframework.beans.factory.NoUniqueBeanDefinitionException: Keine qualifizierende Bean vom Typ [com.gemstone.gemfire.cache.client.Poo l] ist definiert: erwartet einzelne übereinstimmende Bean aber gefunden 2: –

Verwandte Themen