Невозможно подключиться к локатору через GFSH - PullRequest
0 голосов
/ 04 января 2019

Я запустил сервер и локатор GemFire ​​через Spring Boot , и когда я пытаюсь подключиться к локатору из GFSH, я получаю следующую проблему:

gfsh> connect
Connecting to Locator at [host=localhost, port=10334] ..
Connection refused: connect

Ниже приведена конфигурация Spring (Java):

@Configuration 
@ComponentScan 
@EnableGemfireRepositories(basePackages= "com.gemfire.demo") 
@CacheServerApplication(locators = "localhost[10334]") 
@EnableManager 
public class GemfireConfiguration {

    @Bean
    Properties gemfireProperties() {
        Properties gemfireProperties = new Properties();
        gemfireProperties.setProperty("name", "SpringDataGemFireApplication");
        gemfireProperties.setProperty("mcast-port", "0");
        gemfireProperties.setProperty("log-level", "info");
        return gemfireProperties;
    }

    @Bean
    @Autowired
    CacheFactoryBean gemfireCache() {
        CacheFactoryBean gemfireCache = new CacheFactoryBean();
        gemfireCache.setClose(true);
        gemfireCache.setProperties(gemfireProperties());
        return gemfireCache;
    }

    @Bean(name="employee")
    @Autowired
    LocalRegionFactoryBean<String, Employee> getEmployee(final GemFireCache cache) {
        LocalRegionFactoryBean<String, Employee> employeeRegion = new LocalRegionFactoryBean<String, Employee>();
        employeeRegion.setCache(cache);
        employeeRegion.setClose(false);
        employeeRegion.setName("employee");
        employeeRegion.setPersistent(false);
        employeeRegion.setDataPolicy(DataPolicy.PRELOADED);
        return employeeRegion;
    }
}

Ссылка: Spring Data Gemfire locator согласно совету Джона, я включил Диспетчер, хотя я все еще не могу соединиться.

1 Ответ

0 голосов
/ 05 января 2019

Вы не можете подключиться к Locator (используя Gfsh ), потому что у вас нет Locator (служба, автономная или встроенная) работает только с конфигурацией Spring (Java), показанной выше.

Обратите внимание, что аннотация @CacheServerApplication(locators = "localhost[10334]"), в частности с атрибутом locators, как вы настроили выше, НЕ запускает встроенный Locator . Он просто позволяет этому Spring Boot сконфигурированному и загруженному узлу Apache Geode или Pivotal GemFire ​​peer Cache присоединиться к существующей распределенной системе (кластеру) с «существующим» Locator , работающим на localhost прослушивает порт 10334.

Например, вы могли запустить Locator , используя Gfsh (например, start locator --name=X ...), а затем запустить приложение Spring Boot с Конфигурация Spring (Java), показанная выше, и вы увидите приложение Spring Boot как часть кластера, образованного Gfsh запущен Локатор .

Это просто ярлык (удобство) для настройки и запуска «встроенного» локатора, но для этого вам нужно использовать аннотацию @EnableLocator.

Следовательно, для настройки и запуска (встроенной) службы Locator в том же приложении Spring Boot , что и CacheServer Manager * 1051) *), вы также должны включить аннотацию @EnableLocator, например:

@SpringBootApplicaton
@CacheServerApplication
@EnableLocator
@EnableManager(start = true)
public class GemFireServerApplication {

  ...
}

У меня есть множество примеров этого здесь , например здесь , и обычно об этом говорят здесь и т. Д.

Как примечание: вся ваша конфигурация (класс) запутана, и становится ясно, что вы не совсем понимаете, что делаете. Например, объявление компонентов gemfireProperties и gemfireCache в JavaConfig является избыточным и ненужным, поскольку вы используете аннотацию @CacheServerApplication. Вся ваша конфигурация может быть упрощена до:

@ CacheServerApplication ( name = "SpringDataGemFireApplication", locators = "localhost [10334]", logLevel = "информация" ) @EnableLocator @EnableManager (start = true) @EnableGemfireRepositories (basePackages = "com.gemfire.demo") @ComponentScan открытый класс GemfireConfiguration {

@Bean(name="employee")
LocalRegionFactoryBean<String, Employee> getEmployee(GemFireCache cache) {

    LocalRegionFactoryBean<String, Employee> employeeRegion = 
        new LocalRegionFactoryBean<String, Employee>();

    employeeRegion.setCache(cache);
    employeeRegion.setClose(false);
    employeeRegion.setName("employee");
    employeeRegion.setPersistent(false);
    employeeRegion.setDataPolicy(DataPolicy.PRELOADED);

    return employeeRegion;
}

}

Две вещи:

1) Во-первых, я бы очень внимательно следил за использованием сканирования компонентов classpath (@ComponentScan). Я не фанат этого подхода к конфигурации, особенно в производстве, где все должно быть ясно.

2) Я бы рекомендовал вам использовать атрибут type-safe basePackageClasses в аннотации @EnableGemFireRepositorities вместо атрибута basePackages. С basePackageClasses вам нужно всего лишь ссылаться на один интерфейс / класс в нужном пакете (например, com.gemfire.demo), а не на каждый интерфейс / класс. Упомянутый интерфейс / класс служит указателем для идентификации пакета для сканирования, включая все подпакеты. Это безопасно для типов, и когда ваши интерфейсы / классы в этом пакете переставляются, ваш атрибут остается действительным после рефакторинга.

В любом случае ...

Надеюсь, это поможет.

-j

...