Мы запускаем управляемый GF SH кластер Geode с несколькими. Net клиентами, и теперь я включаю новый клиент Geode с данными весенней загрузки для конечных точек rSocket web с webflux. Для этого вопроса и этого вопроса Я хочу правильно настроить клиентское приложение SDG на @EnableClusterAware
и @EnableClusterDefinedRegions
. Когда я делаю так, как это:
package app;
.. (imports) ..
@SpringBootApplication
@ComponentScan({"admin", "region", "rsocket", "webflux"}) // scans packages for @ components
@EnableLogging(logLevel="info", logFile="geode.log")
public class Web {
и
package admin;
.. (imports) ..
@EnableClusterAware
@EnableClusterDefinedRegions(clientRegionShortcut=ClientRegionShortcut.CACHING_PROXY)
@UseMemberName("WebServer")
public class ClientCache {
с application.properties
spring.application.name=Web
spring.data.gemfire.pool.locators=1.2.3.4[10334]
spring.data.gemfire.pool.subscription-enabled=true
, тогда приложение клиентского кэша запускается, и оно кажется получите пул ПО УМОЛЧАНИЮ и подключитесь к удаленному серверу GF SH
INFO [main] org.apach.geode.cache.clien.inter.PoolImpl 349 start: Pool DEFAULT started with multiuser-authentication=false
INFO [Cache Client Updater Thread on 1.2.3.4(UAT:12900)<v1>:41001(version:UNKNOWN[ordinal=105]) port 40404] org.apach.geode.inter.cache.tier.socke.CacheClientUpdater 1581 processMessages: Cache Client Updater Thread on 1.2.3.4(UAT:12900)<v1>:41001(version:UNKNOWN[ordinal=105]) port 40404 (1.2.3.4:40404) : ready to process messages.
, но я не вижу областей сервера, настроенных для @EnableClusterDefinedRegions
. Это означает, что при переходе к http://localhost:8082/doWork
обработчик конечной точки @RestController
завершается с ошибкой:
Error creating bean with name 'MyRestController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.apache.geode.cache.Region<java.lang.String, region.Object>' available: expected at least 1 bean which qualifies as autowire candidate.
Это происходит потому, что регионы сервера не инициализируются. Если я добавлю @EnableGemFireHttpSession
, то получу ошибку [gemfirePool] is not resolvable as a Pool in the application context
, и поэтому я определяю свой собственный пул как @EnableGemFireHttpSession(poolName="webPool")
с дополнительным @Bean
:
@Bean("webPool")
PoolFactoryBean sessionPool() {
PoolFactoryBean pool = new PoolFactoryBean();
ConnectionEndpoint ce = new ConnectionEndpoint("1.2.3.4", 10334);
pool.setSubscriptionEnabled(true);
pool.addLocators(ce);
return pool;
}
, и теперь @EnableClusterDefinedRegions
попадает в сервер и создает все регионы, которые мне нужны для меня. Отлично ... но тогда шоу проваливается с:
WARN [main] org.sprin.conte.suppo.AbstractApplicationContext 558 refresh: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Failed to start bean 'gemfireClusterSchemaObjectInitializer'; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://localhost:7070/gemfire/v1/regions": Connection refused: connect; nested exception is java.net.ConnectException: Connection refused: connect
Единственное решение, которое я могу найти до сих пор, это удалить @EnableClusterAware
и использовать аннотации:
package admin;
.. (imports) ..
@EnableClusterDefinedRegions(clientRegionShortcut=ClientRegionShortcut.CACHING_PROXY)
@UseMemberName("WebServer")
@EnableGemFireHttpSession(poolName="webPool")
public class ClientCache {
, который устанавливает все регионы для меня, но затем я сталкиваюсь с эта проблема
В build.gradle
Я использую
implementation 'org.springframework.geode:spring-geode-starter:1.2.4.RELEASE'
implementation 'org.springframework.session:spring-session-data-geode:2.2.2.RELEASE'