Start-Locator / Locators,哪个是客户端的,哪个是服务器的?
Start-Locator / Locators, which is for client and which is for server?
我一直在像这个例子一样配置 Pivotal GemFire:
@Configuration
public class GemfireConfiguration {
@Bean
Properties gemfireProperties() {
Properties gemfireProperties = new Properties();
gemfireProperties.setProperty("name","SpringDataGemFireApplication");
gemfireProperties.setProperty("mcast-port", "0");
gemfireProperties.setProperty("log-level", "config");
return gemfireProperties;
}
@Bean
CacheFactoryBean gemfireCache() {
CacheFactoryBean gemfireCache = new CacheFactoryBean();
gemfireCache.setClose(true);
gemfireCache.setProperties(gemfireProperties());
return gemfireCache;
}
@Bean(name="employee")
LocalRegionFactoryBean<String, Employee> getEmployee(final GemFireCache cache) {
LocalRegionFactoryBean<String, Employee> employeeRegion = new LocalRegionFactoryBean();
employeeRegion.setCache(cache);
employeeRegion.setName("employee");
// ...
return employeeRegion;
}
}
我需要放置一个定位器“localhost[1099]
”,但是当我放置:
gemfireProperties.setProperty("locators", "localhost[1099]");
我从 Spring 收到一条错误消息,说找不到定位器(更具体的是 NULL
),但我将 setter 更改为:
gemfireProperties.setProperty("start-locator", "localhost[1099]");
应用程序运行,但我不知道 Spring 是否创建了定位器或发生了什么。我想指向localhost[1099]
,这样我不确定它是否正确。
我看过很多示例,但我仍然不清楚哪个 属性 用于客户端应用程序或服务器应用程序。
我正在开发 REST API spring-data-gemfire
、宝石等...
谁能帮帮我?
Pivotal GemFire locators
和 start-locator
属性仅供服务器使用。 属性 均不适用于客户端。
locators
标识新成员将作为对等方加入的集群的定位器。它具有以下格式:host1[port1],host2[port2],...,hostN[portN]
.
start-locator
用于在对等 Cache
[应用程序] 节点或服务器中启动嵌入式定位器。当在 IDE 中启动一个小型 GemFire 服务器集群(对等成员节点)时,这个 属性 非常方便。
TIP: Typically, in standalone, production environment, you want to startup multiple, separate and dedicated Locator nodes (JVM processes, and usually on different hosts) for resiliency. But during development, using the start-locator
property is convenient, especially when testing.
您可以阅读有关 locators
和 start-locator
属性的更多信息 here. You can read more about Locators, and specifically member discovery, here and here。
那么,第一个问题,为什么在这种情况下需要一个或多个定位器?
关于...
I need to put a Locator "localhost[1099]", but when a I put: gemfireProperties.setProperty("locators", "localhost[1099]");
I get an error from Spring saying that the Locator could not be found (more specific is NULL), ...
当您还没有启动定位器时就会出现这种情况。如果您指定 start-locator
那么您的 Spring (Pivotal GemFire 的数据),对等 Cache
应用程序将在启动时嵌入定位器(服务),在这种情况下,您不需要指定locators
属性 因为它是多余的。
使用嵌入式定位器,您可以开始,或让其他成员加入集群中的该成员。
例如,我经常使用这样的 classes 来启动一个小型的 Pivotal GemFire 集群,用于开发、测试和演示目的...
@SpringBootApplication
//@CacheServerApplication(name = "ExampleServerApplication", locators = "localhost[10334]")
@PeerCacheApplication(name = "BookExampleServerApplication", locators = "localhost[10334]")
@EnablePdx(readSerialized = true)
@SuppressWarnings("unused")
public class GeodeServerApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(GeodeServerApplication.class)
.web(WebApplicationType.NONE)
.build()
.run(args);
}
@Profile("locator-manager")
@Configuration
@EnableLocator
@EnableManager(start = true)
static class LocatorManagerConfiguration { }
}
完整的源代码可用 here。
一些注意事项。
首先,@CacheServerApplication
和 @PeerCacheApplication
注释几乎是同义词。他们都创建了一个 Spring Boot,Pivotal GemFire peer Cache
应用程序节点(服务器)。唯一的区别是,@CacheServerApplication
额外添加了一个 ServerSocket
,允许基于 GemFire ClientCache
的应用程序(即用 SDG 的 @ClientClientApplication
注释的 Spring 启动应用程序)连接到服务器。
如您所见,我创建了一个内部静态 LocatorManagerConfiguration
class。这个 class 被注释为 @EnableLocator
和 @EnableManager
。 @EnableLocator
等同于 start-locator
属性 并允许您控制嵌入式定位器服务将在启动时绑定到的 NIC 和端口。默认情况下,嵌入式定位器服务在绑定到默认定位器端口 10334
.
的“localhost
”上启动
我添加了 @EnableManager
注释以同时启动基于 GemFire JMX 的管理服务,它允许 Gfsh 连接到我们的 Spring Boot configured/bootstrapped GemFire 服务器。
我使用 Spring 配置文件 ("locator-manager
") 启用此 Spring @Configuration
class 以便只有 1 个服务器以嵌入式 Locator/Manager。当然,我可以让多个服务器启动一个 Locator and/or Manager,但是我需要小心地改变 Locator 和 Manager 服务在侦听客户端连接时使用的端口号(例如,Manager 侦听来自JMX 客户端,例如 Gfsh,或 JConsole,或 JVisualVM,等等)。
那么,我们如何运行这个?
好吧,假设我们要创建一个包含 3 个服务器的小型 GemFire 集群。在我的 IDE 中,我使用相同的 GeodeServerApplication
class 创建了 3 个不同的 运行 配置文件。第一个 运行 配置文件将以“locator-manager
” Spring 配置文件启用开始,就像这样...
-server -ea -Dspring.profiles.active=locator-manager -Dspring.data.gemfire.name=GeodeServerOne
我 IDE 中接下来的 2 运行 个配置文件是这样设置的...
-server -ea -Dspring.profiles.active=none -Dspring.data.gemfire.name=GeodeServerTwo
-server -ea -Dspring.profiles.active=none -Dspring.data.gemfire.name=GeodeServerThree
唯一的区别是,对于我的最后一个 运行 配置文件 运行 配置文件 3,我需要为服务器命名一些不同的名称,例如“GeodeServerThree
”。 Pivotal GemFire 期望集群中对等成员的名称是唯一的。
现在,在我的 IDE 中,我可以先启动启用 Locator/Manager 的服务器,然后 运行 最后两台没有启用嵌入式 Locator/Manager 的服务器, 下一个。然后,我可以使用 Gfsh 检查我的集群,如下所示:
$ echo $GEODE_HOME
/Users/jblum/pivdev/apache-geode-1.2.1
$ gfsh
_________________________ __
/ _____/ ______/ ______/ /____/ /
/ / __/ /___ /_____ / _____ /
/ /__/ / ____/ _____/ / / / /
/______/_/ /______/_/ /_/ 1.2.1
Monitor and Manage Apache Geode
gfsh>connect
Connecting to Locator at [host=localhost, port=10334] ..
Connecting to Manager at [host=10.0.0.121, port=1099] ..
Successfully connected to: [host=10.0.0.121, port=1099]
gfsh>list members
Name | Id
---------------- | ---------------------------------------------
GeodeServerOne | 10.0.0.121(GeodeServerOne:42883)<ec><v0>:1024
GeodeServerTwo | 10.0.0.121(GeodeServerTwo:42911)<v1>:1025
GeodeServerThree | 10.0.0.121(GeodeServerThree:42913)<v2>:1026
如果您启用了这些 Spring Boot,Pivotal GemFire 对等 Cache
应用程序也将成为 CacheServers
(通过将 @PeerCacheApplication
注释替换为 @CacheServerApplication
), 然后你就可以连接缓存客户端应用程序了,类似于下面...
TIP: The BootExampleApplication
is using the new Spring Boot for Apache Geode/Pivotal GemFire (SBDG) project which auto-configures a ClientCache
instance, by default, when either spring-geode-starter
or, alternatively, spring-gemfire-starter
, is on your application's classpath. See the docs for additional details. If this project were not using SBDG, then you would explicitly have to annotate your Spring Boot application class with SDG's @ClientCacheApplication
.
阅读此 chapter & section SDG 参考指南了解更多详情。
无论如何,我希望这能为您提供一些指导,让您了解这些属性的用途以及 SDG 注释的功能。另请查看新的 Spring Boot for Apache Geode/Pivotal GemFire 项目(参见 blog post) ,它使用约定优于配置 Spring Boot 的自动配置支持来进一步简化客户端或服务器 Apache Geode/Pivotal GemFire 应用程序的配置和引导。
干杯,
-约翰
我一直在像这个例子一样配置 Pivotal GemFire:
@Configuration
public class GemfireConfiguration {
@Bean
Properties gemfireProperties() {
Properties gemfireProperties = new Properties();
gemfireProperties.setProperty("name","SpringDataGemFireApplication");
gemfireProperties.setProperty("mcast-port", "0");
gemfireProperties.setProperty("log-level", "config");
return gemfireProperties;
}
@Bean
CacheFactoryBean gemfireCache() {
CacheFactoryBean gemfireCache = new CacheFactoryBean();
gemfireCache.setClose(true);
gemfireCache.setProperties(gemfireProperties());
return gemfireCache;
}
@Bean(name="employee")
LocalRegionFactoryBean<String, Employee> getEmployee(final GemFireCache cache) {
LocalRegionFactoryBean<String, Employee> employeeRegion = new LocalRegionFactoryBean();
employeeRegion.setCache(cache);
employeeRegion.setName("employee");
// ...
return employeeRegion;
}
}
我需要放置一个定位器“localhost[1099]
”,但是当我放置:
gemfireProperties.setProperty("locators", "localhost[1099]");
我从 Spring 收到一条错误消息,说找不到定位器(更具体的是 NULL
),但我将 setter 更改为:
gemfireProperties.setProperty("start-locator", "localhost[1099]");
应用程序运行,但我不知道 Spring 是否创建了定位器或发生了什么。我想指向localhost[1099]
,这样我不确定它是否正确。
我看过很多示例,但我仍然不清楚哪个 属性 用于客户端应用程序或服务器应用程序。
我正在开发 REST API spring-data-gemfire
、宝石等...
谁能帮帮我?
Pivotal GemFire locators
和 start-locator
属性仅供服务器使用。 属性 均不适用于客户端。
locators
标识新成员将作为对等方加入的集群的定位器。它具有以下格式:host1[port1],host2[port2],...,hostN[portN]
.
start-locator
用于在对等 Cache
[应用程序] 节点或服务器中启动嵌入式定位器。当在 IDE 中启动一个小型 GemFire 服务器集群(对等成员节点)时,这个 属性 非常方便。
TIP: Typically, in standalone, production environment, you want to startup multiple, separate and dedicated Locator nodes (JVM processes, and usually on different hosts) for resiliency. But during development, using the
start-locator
property is convenient, especially when testing.
您可以阅读有关 locators
和 start-locator
属性的更多信息 here. You can read more about Locators, and specifically member discovery, here and here。
那么,第一个问题,为什么在这种情况下需要一个或多个定位器?
关于...
I need to put a Locator "localhost[1099]", but when a I put:
gemfireProperties.setProperty("locators", "localhost[1099]");
I get an error from Spring saying that the Locator could not be found (more specific is NULL), ...
当您还没有启动定位器时就会出现这种情况。如果您指定 start-locator
那么您的 Spring (Pivotal GemFire 的数据),对等 Cache
应用程序将在启动时嵌入定位器(服务),在这种情况下,您不需要指定locators
属性 因为它是多余的。
使用嵌入式定位器,您可以开始,或让其他成员加入集群中的该成员。
例如,我经常使用这样的 classes 来启动一个小型的 Pivotal GemFire 集群,用于开发、测试和演示目的...
@SpringBootApplication
//@CacheServerApplication(name = "ExampleServerApplication", locators = "localhost[10334]")
@PeerCacheApplication(name = "BookExampleServerApplication", locators = "localhost[10334]")
@EnablePdx(readSerialized = true)
@SuppressWarnings("unused")
public class GeodeServerApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(GeodeServerApplication.class)
.web(WebApplicationType.NONE)
.build()
.run(args);
}
@Profile("locator-manager")
@Configuration
@EnableLocator
@EnableManager(start = true)
static class LocatorManagerConfiguration { }
}
完整的源代码可用 here。
一些注意事项。
首先,@CacheServerApplication
和 @PeerCacheApplication
注释几乎是同义词。他们都创建了一个 Spring Boot,Pivotal GemFire peer Cache
应用程序节点(服务器)。唯一的区别是,@CacheServerApplication
额外添加了一个 ServerSocket
,允许基于 GemFire ClientCache
的应用程序(即用 SDG 的 @ClientClientApplication
注释的 Spring 启动应用程序)连接到服务器。
如您所见,我创建了一个内部静态 LocatorManagerConfiguration
class。这个 class 被注释为 @EnableLocator
和 @EnableManager
。 @EnableLocator
等同于 start-locator
属性 并允许您控制嵌入式定位器服务将在启动时绑定到的 NIC 和端口。默认情况下,嵌入式定位器服务在绑定到默认定位器端口 10334
.
localhost
”上启动
我添加了 @EnableManager
注释以同时启动基于 GemFire JMX 的管理服务,它允许 Gfsh 连接到我们的 Spring Boot configured/bootstrapped GemFire 服务器。
我使用 Spring 配置文件 ("locator-manager
") 启用此 Spring @Configuration
class 以便只有 1 个服务器以嵌入式 Locator/Manager。当然,我可以让多个服务器启动一个 Locator and/or Manager,但是我需要小心地改变 Locator 和 Manager 服务在侦听客户端连接时使用的端口号(例如,Manager 侦听来自JMX 客户端,例如 Gfsh,或 JConsole,或 JVisualVM,等等)。
那么,我们如何运行这个?
好吧,假设我们要创建一个包含 3 个服务器的小型 GemFire 集群。在我的 IDE 中,我使用相同的 GeodeServerApplication
class 创建了 3 个不同的 运行 配置文件。第一个 运行 配置文件将以“locator-manager
” Spring 配置文件启用开始,就像这样...
-server -ea -Dspring.profiles.active=locator-manager -Dspring.data.gemfire.name=GeodeServerOne
我 IDE 中接下来的 2 运行 个配置文件是这样设置的...
-server -ea -Dspring.profiles.active=none -Dspring.data.gemfire.name=GeodeServerTwo
-server -ea -Dspring.profiles.active=none -Dspring.data.gemfire.name=GeodeServerThree
唯一的区别是,对于我的最后一个 运行 配置文件 运行 配置文件 3,我需要为服务器命名一些不同的名称,例如“GeodeServerThree
”。 Pivotal GemFire 期望集群中对等成员的名称是唯一的。
现在,在我的 IDE 中,我可以先启动启用 Locator/Manager 的服务器,然后 运行 最后两台没有启用嵌入式 Locator/Manager 的服务器, 下一个。然后,我可以使用 Gfsh 检查我的集群,如下所示:
$ echo $GEODE_HOME
/Users/jblum/pivdev/apache-geode-1.2.1
$ gfsh
_________________________ __
/ _____/ ______/ ______/ /____/ /
/ / __/ /___ /_____ / _____ /
/ /__/ / ____/ _____/ / / / /
/______/_/ /______/_/ /_/ 1.2.1
Monitor and Manage Apache Geode
gfsh>connect
Connecting to Locator at [host=localhost, port=10334] ..
Connecting to Manager at [host=10.0.0.121, port=1099] ..
Successfully connected to: [host=10.0.0.121, port=1099]
gfsh>list members
Name | Id
---------------- | ---------------------------------------------
GeodeServerOne | 10.0.0.121(GeodeServerOne:42883)<ec><v0>:1024
GeodeServerTwo | 10.0.0.121(GeodeServerTwo:42911)<v1>:1025
GeodeServerThree | 10.0.0.121(GeodeServerThree:42913)<v2>:1026
如果您启用了这些 Spring Boot,Pivotal GemFire 对等 Cache
应用程序也将成为 CacheServers
(通过将 @PeerCacheApplication
注释替换为 @CacheServerApplication
), 然后你就可以连接缓存客户端应用程序了,类似于下面...
TIP: The
BootExampleApplication
is using the new Spring Boot for Apache Geode/Pivotal GemFire (SBDG) project which auto-configures aClientCache
instance, by default, when eitherspring-geode-starter
or, alternatively,spring-gemfire-starter
, is on your application's classpath. See the docs for additional details. If this project were not using SBDG, then you would explicitly have to annotate your Spring Boot application class with SDG's@ClientCacheApplication
.
阅读此 chapter & section SDG 参考指南了解更多详情。
无论如何,我希望这能为您提供一些指导,让您了解这些属性的用途以及 SDG 注释的功能。另请查看新的 Spring Boot for Apache Geode/Pivotal GemFire 项目(参见 blog post) ,它使用约定优于配置 Spring Boot 的自动配置支持来进一步简化客户端或服务器 Apache Geode/Pivotal GemFire 应用程序的配置和引导。
干杯, -约翰