2

我正在尝试使用 Spring Data Gemfire 设置 Gemfire 集群。

我可以通过gfsh启动定位器,也可以通过 Spring 启动服务器

问题是,我找不到通过 Spring启动定位器的方法。

4

1 回答 1

5

可能最简单、最简单的方法是在服务器中启动“嵌入式”定位器。在使用 1 个或多个 Spring 配置的 GemFire 服务器测试或启动独立集群时,我经常使用这种技术。

配置如下所示...

<util:properties id="gemfireProperties">
  <prop key="name">GemFireServerWithEmbeddedLocator</prop>
  <prop key="mcast-port">0</prop>
  <prop key="locators">localhost[11235]</prop>
  <prop key="log-level">config</prop>
  <prop key="start-locator">localhost[11235]</prop>
</util:properties>

<gfe:cache properties-ref="gemfireProperties"/>

...

请注意,两个相关的 GemFire 系统属性是“locators”属性和“start-locator”属性。“start-locator” GemFire 系统属性是在 GemFire 服务器中启动“嵌入式”定位器的配置设置。“定位器” GemFire System 属性只是告诉服务器要联系哪个定位器以加入集群(当然由定位器确定)。

您甚至可以通过以下配置变得更复杂......

<util:properties id="gemfireProperties">
  <prop key="name">GemFireCacheServerManagerLocator</prop>
  <prop key="mcast-port">0</prop>
  <prop key="locators">localhost[11235]</prop>
  <prop key="log-level">config</prop>
  <prop key="http-service-port">8181</prop>
  <prop key="jmx-manager">true</prop>
  <prop key="jmx-manager-port">1199</prop>
  <prop key="jmx-manager-start">true</prop>
  <prop key="start-locator">localhost[11235]</prop>
</util:properties>

<gfe:cache properties-ref="gemfireProperties"/>

<gfe:cache-server auto-startup="true" bind-address="${server.bind.address}" port="${server.port}" host-name-for-clients="${server.hostname.for.clients}" max-connections="${server.max.connections}"/>

在这个配置中,我告诉 GemFire 服务器启动一个“嵌入式”定位器(“start-locator”)并连接到它(“locators”),作为集群中的 GemFire 管理器(“jmx-manager”)然后启动管理服务(“jmx-manager-start”),最后启动“嵌入式”HTTP 服务,使用 Jetty(“http-service-port”)实现,它将启动 Pulse、管理 REST API 并作为以及开发人员 REST API。

不仅如此,有了“”元素,GemFire Server 也将成为一个“缓存服务器”,监听和服务缓存客户端。

一旦 GemFire 服务器启动“嵌入式”定位器(或可选的 GemFire 管理服务(管理器)),您可以像这样在 Gfsh 中连接到它...

gfsh>connect --locator=localhost[11235]

或者,如果您启动了管理服务,您可以直接连接到管理器...

gfsh>connect --jmx-manager=localhost[1199]

请注意,从 Gfsh 到 Locator 的连接请求只是发送一个请求以“定位”集群中的 Manager。如果集群中有Manager,则Locator发回Manager的坐标(IP/Port),否则Locator将承担Manager的角色(Locator默认设置了jmx-manager=start)并将响应发回给Gfsh。然后,Gfsh 将直接与 Manager 建立新的 JMX-RMI 连接。因此,如果您知道 IP 和 PORT,则使用“connect --jmx-manager”会更直接。

另请注意,GemFire“定位器”系统属性可以是逗号分隔的定位器列表,如下所示......

locators=host1[port1],host2[port2],...,hostN[portN]

但是,“start-locator”GemFire System 属性只是一个主机[端口],因为您只能拥有 1 个“嵌入式”定位器。

现在,启动 Locator 的另一种方式是使用 Spring FactoryBean。不久前,我基于 GemFire 的 LocatorLauncher 公共 Java API 类创建了一个 LocatorLauncherFactoryBean。

此类是客户的原型,用于演示如何在 Spring 上下文中配置和启动定位器。我计划最终引入在 Spring 上下文中配置定位器的正式支持,但是与其他票证相比,此 JIRA 票证的优先级较低。

有关详细信息,请参阅SGF-222。您还会发现 LocatorLauncherFactoryBean 类附加到 JIRA 票证上。随意使用和调整您的目的。

同样,LocatorLauncherFactoryBean 是一个原型,它对实际 GemFire LocatorLauncher 类的广泛配置设置的支持并不完整。

希望这可以帮助; 干杯!

于 2015-07-01T15:19:34.063 回答