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
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?
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). –
Hallo John, als ich die obige Konfiguration versuchte, bekam ich einen Fehler NoUniquieBeanDefinitionException: Keine qualifizierende Bohne vom Typ com.gemstone.gemfire.cache.client.Pool –
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: –