@EnableClusterAware аннотация с удаленным GF SH запущен. Сервер Geode требует настройки HTTP - PullRequest
0 голосов
/ 14 февраля 2020

Мы запускаем управляемый 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'

1 Ответ

1 голос
/ 15 февраля 2020

Я думаю, что есть некоторая путаница вокруг @EnableClusterDefinedRegions. @EnableClusterDefinedRegions использует регионы, которые уже объявлены на вашем сервере, для настройки клиентских регионов, а не наоборот. Звучит так, как вы хотите: @EnableClusterConfiguration, что приведет к выводу на сервер областей, определенных вашим клиентом. Однако вам не нужно явно указывать @EnableClusterConfiguration, потому что @ClusterAware мета-аннотирован @EnableClusterConfiguration.

Что касается того, почему ваши регионы не создаются, я предполагаю, что определения ваших регионов не найдены. Я заметил, что ваш ClientCache класс не помечен @Component, даже если вы сканируете его компонент; это тот класс, в котором вы определили, что ваш регион аннотируется @Component? Если нет, попробуйте добавить его.

...