我正在尝试使用Spring Data Gemfire设置Gemfire群集。
我可以通过 gfsh 启动定位器,我可以通过Spring启动服务器。
问题是,我找不到通过Spring启动定位器的方法。
答案 0 :(得分:5)
可能最简单,最简单的方法是在服务器中启动“嵌入式”定位器。在测试或启动具有一个或多个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"/>
...
注意,2个相关的GemFire系统属性是“locators”属性和“start-locator”属性。 “start-locator”GemFire System属性是在GemFire服务器中启动“嵌入式”定位器的配置设置。 “定位器”GemFire系统属性只是告诉服务器要联系哪个定位器来加入群集(当然由定位器确定)。
您甚至可以通过以下配置变得更加复杂......
<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服务器启动一个“嵌入式”定位器(“启动定位器”)并连接到它(“定位器”),作为集群中的GemFire管理器(“jmx-经理“)然后启动管理服务(”jmx-manager-start“),最后启动”嵌入式“HTTP服务,用Jetty(”http-service-port“)实现,这将启动Pulse,管理REST API以及Developer REST API。
不仅如此,使用“”元素,GemFire服务器也将成为监听和服务缓存客户端的“缓存服务器”。
一旦GemFire服务器启动“嵌入式”定位器(或者可选择GemFire管理服务(管理器)),您可以在Gfsh中连接它,就像这样......
gfsh>connect --locator=localhost[11235]
或者,如果您启动了管理服务,则可以使用...
直接连接到Managergfsh>connect --jmx-manager=localhost[1199]
注意,从Gfsh到Locator的连接请求只是发送一个请求来“定位”集群中的Manager。如果群集中有管理器,则定位器会发回管理器的坐标(IP /端口),否则定位器将承担管理员的角色(定位器默认设置jmx-manager = start)并将响应发送回Gfsh。然后,Gfsh将直接与Manager形成新的JMX-RMI连接。因此,如果您知道IP和PORT,使用'connect --jmx-manager'会更直接。
另请注意,GemFire“locators”系统属性可以是逗号分隔的Locator列表,如此...
locators=host1[port1],host2[port2],...,hostN[portN]
但是,“start-locator”GemFire System属性只是一个主机[端口],因为你只能有1个“嵌入式”定位器。
现在,您可以使用Spring FactoryBean启动Locator的另一种方式。不久前,我基于GemFire的LocatorLauncher公共Java API类创建了一个LocatorLauncherFactoryBean。
此类是客户的原型,用于演示如何在Spring上下文中配置和启动Locator。我计划最终在Spring上下文中引入正式支持定位器,但是与其他票证相比,这个JIRA票证的优先级较低。
有关详细信息,请参阅SGF-222。您还将找到附加到JIRA票证的LocatorLauncherFactoryBean类。随意使用和调整以达到您的目的。
同样,LocatorLauncherFactoryBean是一个原型,并且几乎不完整,它支持实际GemFire LocatorLauncher类的各种配置设置。
希望这会有所帮助;干杯!