您好我想使用Spring gemfire 8.1在同一台主机上启动多个gemfire缓存服务器。请在下面找到gemfire配置文件。我想使用Spring Gemfire配置在同一主机ieHOSTNAME上启动GFServer1和GFServer2。我想避免使用gfsh命令并从eclipse启动所有内容并将客户端连接到同一主机上的这些服务器。 提前致谢
<util:properties id="gemfireProperties">
<prop key="name">Locator_Dev</prop>
<prop key="mcast-port">0</prop>
<prop key="locators">HOSTNAME[1099]</prop>
<prop key="log-level">warning</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">HOSTNAME[1099]</prop>
</util:properties>
<gfe:cache properties-ref="gemfireProperties" />
<gfe:cache-server id="GFServer1" auto-startup="true"
bind-address="HOSTNAME" port="40411" host-name-for-clients="HOSTNAME"
load-poll-interval="2000" max-connections="22" max-threads="16"
max-message-count="1000" max-time-between-pings="30000" >
<gfe:subscription-config eviction-type="ENTRY"
capacity="1000" disk-store="diskStore1" />
</gfe:cache-server>
<gfe:cache-server id="GFServer2" auto-startup="true"
bind-address="HOSTNAME" port="40412" host-name-for-clients="HOSTNAME"
load-poll-interval="2000" max-connections="22" max-threads="16"
max-message-count="1000" max-time-between-pings="30000" >
<gfe:subscription-config eviction-type="ENTRY"
capacity="1000" disk-store="diskStore1" />
</gfe:cache-server>
<gfe:disk-store id="diskStore1" queue-size="50"
auto-compact="true" max-oplog-size="10" time-interval="9999">
<gfe:disk-dir
location="D:\NP\WorkSpace\GemfireRegionSolutionNStart\disk-store\store_1"
max-size="20" />
<gfe:disk-dir
location="D:\NP\WorkSpace\GemfireRegionSolutionNStart\disk-store\store_2"
max-size="20" />
</gfe:disk-store>
<gfe:replicated-region id="customer" name="Customer">
</gfe:replicated-region>
<gfe:replicated-region id="bookMaster" name="BookMaster">
</gfe:replicated-region>
</beans>
答案 0 :(得分:1)
您发布的配置将在同一个JVM中创建两个缓存服务器,即它将在同一个进程中打开两个端口。
如果这不是您想要的,即您需要两个不同的进程,在eclipse中您必须提供两个运行时配置来启动这两个服务器。
答案 1 :(得分:1)
是否有具体问题?正如@Swapnil指出的那样,这将启动2个GemFire&#34;缓存服务器&#34; (ServerSockets侦听缓存客户端),因为您已在同一JVM中的同一主机上进行了适当配置。无论如何执行(即IDE,命令行,Gfsh或Spring Boot),这都可以工作。
如果您有更具体的问题,请告诉我们,谢谢!
答案 2 :(得分:1)
所以你可以配置LocatorLauncherFactoryBean,例如,像......
<uti:properties id="gemfireProperties">
<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="locators">host1[10334],host2[11235],...,hostN[20668]</prop>
</util:properties>
<bean id="locator" class="org.spring.data.gemfire.config.LocatorLauncherFactoryBean">
<property name="gemfireProperties" ref="gemfireProperties"/>
<property name="memberName" value="SpringDataGemFireLocator"/>
<property name="bindAddress" value="10.124.12.24"/>
<property name="port" value="12480"/>
</bean>
您可能已经注意到,此定位器可以加入GemFire群集中的其他定位器,这些定位器在&#34; gemfireProperties
&#34;豆与&#34; locators
&#34; GemFire系统属性。
注意:&#34; bindAddress
&#34;仅当运行此定位器的localhost具有多个NIC并且您要绑定到特定NIC时,才需要LocatorLauncherFactoryBean
的属性。
此外,我已设置JMX Manager GemFire系统属性以使Locator成为并实际启动Manager(在端口1199上)。这样,您就可以使用gfsh>connect --locator=localhost[12480]
或gfsh>connect --jmx-manager=localhost[1199]
从Gfsh连接到此定位器。
基本上,&#34; gemfireProperties
&#34; bean允许您配置任何valid GemFire System property。
现在,由于此定位器是在IDE中运行的,因此您需要配置&#34;运行配置文件&#34;使用$GEMFIRE
环境变量指向GemFire distribution downloaded from Pivotal's website,以便从此定位器运行Pulse。在决定是否1.启动嵌入式HTTP服务(Jetty)运行GemFire的开箱即用Web应用程序(例如Pulse)时,这是expected by the GemFire Manager's ManagementAgent,以及2.是否可以找到Pulse并启动webapp。发行版中的ManagementAgent looks for Pulse。
例如,我将$ GEMFIRE环境变量设置为...
/用户/ jblum /下载/枢转/ GemStone的/产品/的GemFire / Pivotal_GemFire_820_b17919_Linux
现在,为了让您的个人Spring配置的GemFire服务器连接到群集,这很简单。
同样,你只需要一个&#34; gemfireProperties
&#34; bean在每个Spring GemFire Server XML配置文件中定义,使用&#34;定位器&#34;定义了GemFire系统属性,例如...
<uti:properties id="gemfireProperties">
<prop key="log-level">config</prop>
<prop key="locators">localhost[12480]</prop>
</util:properties>
<gfe:cache properties-ref="gemfireProperties"/>
此配置将使GemFire数据节点能够连接到群集,如果一切设置正确,将从Pulse中看到此群集。
再次,希望这会有所帮助。
干杯, 约翰
答案 3 :(得分:0)
好的......所以你在IDE中有一些选项(例如Eclipse)。
如果将上面的Spring配置分成2个单独的Spring(Data GemFire)XML配置文件,每个包含1个<gfe:cache-server>
元素,请调用这些文件,例如spring-gemfire-server1-context.xml和spring-gemfire-server2-context.xml,你可以运行基于Spring的/配置GemFire&#34;数据节点&#34;和缓存服务器具有以下...
简单的小Java&#34; main&#34; program是上面提到的一个Spring XML配置文件的文件系统路径。
更好的是,你可以使用类似的东西在SpringBoot应用程序中启动这些Spring(GemFire)配置。
UsefulSpringBootGemFireApplication
正如您在此处所看到的,如果您使用基于Java的配置从Spring配置GemFire(例如,UsefulSpringBasedGemFireConfiguration),或者在您的情况下使用XML,则可以使用@Import
注释使用
@ImportResoruce("/classpath/to/spring-gemfire-server1-context.xml")
注释。
可能(不确定)将System属性值传递给@ImportResource注释,就像这样......
@SpringBootApplication
@ImportResource("${spring-gemfire-context-xml-location}")
class SpringBootGemFireApplication {
...
}
然后,在IDE中,您可以创建2个单独的&#34;运行配置文件&#34;使用相同的SpringBootGemFireApplication
类,然后为每个配置适当地设置系统属性(例如-Dspring-gemfire-context-xml-location=/path/to/spring-gemfire-server1-context.xml
)。
请记住,您可以使用Spring的ResourceLoader path qualifiers(例如file:,http:等)从不同的源位置(CLASSPATH,文件系统等)解析Spring GemFire配置...请参阅 Spring框架参考指南的超链接部分中的表(&#34;表7.1资源字符串&#34;)。
在最坏的情况下,您需要创建2个独立但几乎相同的SpringBoot应用程序Java主类,以便为每个GemFire数据节点(&amp; CacheServer)JVM进程启动2个配置文件。但是,希望使用System属性方法允许您在2个单独的运行配置文件中回收相同的类。
因此,现在您将获得2个GemFire数据节点JVM进程。但是,他的定位器怎么样?
好吧,您可以像以前一样继续在GemFire数据节点服务器JVM流程中嵌入Locator,但如果您真的需要一个独立的Locator JVM流程,那么您可以使用以下内容,&#34; experimental&#34;类...
本课程使用GemFire的LocatorLauncher类来配置和引导Spring配置中的 GemFire Locator 。我在2年前为客户POC创建了这个类,作为开发人员如何从Spring配置中配置 GemFire Locator 的示例。
Spring XML配置(由SpringBootGemFireApplication
@ImportResoruce
注释用于另一个&#34;运行配置文件&#34;和系统属性组合),看起来类似于以下内容......
现在,您已经有效地实现了3个独立的GemFire JVM进程(2个服务器和1个Locator)。您可以使用我们的IDE将其扩展到所需的许多服务器和定位器,Pulse将在群集中显示所有这些,前提是群集配置正确(服务器指向定位器等)。
希望这有帮助。
干杯! 约翰