无法通过 GFSH 连接到定位器
Unable to connect to Locator via GFSH
我已经通过 Spring Boot 启动了 GemFire 服务器和定位器,当我尝试从 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
按照 John 的建议,我启用了管理器,但仍然无法连接。
您无法连接到 Locator(使用 Gfsh),因为您没有 Locator(服务,独立或嵌入式)运行 只是上面显示的 Spring (Java) 配置。
请注意,@CacheServerApplication(locators = "localhost[10334]")
注释,特别是您在上面配置的 locators
属性,不会启动嵌入式 Locator。它只是允许这个 Spring Boot 配置和引导的 Apache Geode 或 Pivotal GemFire 对等 Cache
节点加入一个现有的分布式系统(集群) "existing" Locator 运行 在 localhost
上,侦听端口 10334
.
例如,您可以使用 Gfsh(例如 start locator --name=X ...
)启动 Locator,然后启动您的 Spring 使用上面显示的 Spring (Java) 配置启动 应用程序,您会看到 Spring Boot app作为集群的一部分由Gfsh启动Locator.
配置和启动 "embedded" 定位器只是一个快捷方式(方便),但是要这样做,您需要使用 @EnableLocator
注释。
因此,要在与CacheServer(和Manager),你还必须包括@EnableLocator
注解,像这样:
@SpringBootApplicaton
@CacheServerApplication
@EnableLocator
@EnableManager(start = true)
public class GemFireServerApplication {
...
}
我有很多这样的例子here, for instance here, and talk about this generally here,等等
附带说明一下,您的整个配置 (class) 很混乱,很明显您不太明白自己在做什么。例如,在 JavaConfig 中声明 gemfireProperties
和 gemfireCache
beans 是多余且不必要的,因为您正在使用 @CacheServerApplication
注释。您的整个配置可以简化为:
@CacheServerApplication(
姓名="SpringDataGemFireApplication",
定位器 = "localhost[10334]",
日志级别 = "info"
)
@EnableLocator
@EnableManager(开始=真)
@EnableGemfireRepositories(basePackages= "com.gemfire.demo")
@组件扫描
public class 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) 首先,我会非常小心地使用 class 路径组件扫描 (@ComponentScan
)。我不喜欢这种配置方法,尤其是在应该明确的生产环境中。
2) 我鼓励您考虑在 @EnableGemFireRepositorities
注释上使用类型安全的 basePackageClasses
属性而不是 basePackages
属性。使用 basePackageClasses
,您只需引用所需包中的单个 interface/class(例如 com.gemfire.demo
),而不是每个 interface/class。引用的 interface/class 用作标识要扫描的包的指针,包括所有子包。它是类型安全的,当您重新定位该包中的 interfaces/classes 时,您的属性在重构后仍然有效。
总之...
希望这对您有所帮助。
-j
我已经通过 Spring Boot 启动了 GemFire 服务器和定位器,当我尝试从 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 按照 John 的建议,我启用了管理器,但仍然无法连接。
您无法连接到 Locator(使用 Gfsh),因为您没有 Locator(服务,独立或嵌入式)运行 只是上面显示的 Spring (Java) 配置。
请注意,@CacheServerApplication(locators = "localhost[10334]")
注释,特别是您在上面配置的 locators
属性,不会启动嵌入式 Locator。它只是允许这个 Spring Boot 配置和引导的 Apache Geode 或 Pivotal GemFire 对等 Cache
节点加入一个现有的分布式系统(集群) "existing" Locator 运行 在 localhost
上,侦听端口 10334
.
例如,您可以使用 Gfsh(例如 start locator --name=X ...
)启动 Locator,然后启动您的 Spring 使用上面显示的 Spring (Java) 配置启动 应用程序,您会看到 Spring Boot app作为集群的一部分由Gfsh启动Locator.
配置和启动 "embedded" 定位器只是一个快捷方式(方便),但是要这样做,您需要使用 @EnableLocator
注释。
因此,要在与CacheServer(和Manager),你还必须包括@EnableLocator
注解,像这样:
@SpringBootApplicaton
@CacheServerApplication
@EnableLocator
@EnableManager(start = true)
public class GemFireServerApplication {
...
}
我有很多这样的例子here, for instance here, and talk about this generally here,等等
附带说明一下,您的整个配置 (class) 很混乱,很明显您不太明白自己在做什么。例如,在 JavaConfig 中声明 gemfireProperties
和 gemfireCache
beans 是多余且不必要的,因为您正在使用 @CacheServerApplication
注释。您的整个配置可以简化为:
@CacheServerApplication( 姓名="SpringDataGemFireApplication", 定位器 = "localhost[10334]", 日志级别 = "info" ) @EnableLocator @EnableManager(开始=真) @EnableGemfireRepositories(basePackages= "com.gemfire.demo") @组件扫描 public class 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) 首先,我会非常小心地使用 class 路径组件扫描 (@ComponentScan
)。我不喜欢这种配置方法,尤其是在应该明确的生产环境中。
2) 我鼓励您考虑在 @EnableGemFireRepositorities
注释上使用类型安全的 basePackageClasses
属性而不是 basePackages
属性。使用 basePackageClasses
,您只需引用所需包中的单个 interface/class(例如 com.gemfire.demo
),而不是每个 interface/class。引用的 interface/class 用作标识要扫描的包的指针,包括所有子包。它是类型安全的,当您重新定位该包中的 interfaces/classes 时,您的属性在重构后仍然有效。
总之...
希望这对您有所帮助。
-j