我在两台unix机器上有一个有2个定位器和2个服务器的GemFire集群。我正在运行一个Spring Boot应用程序,该应用程序以对等方式加入GemFire集群,并尝试创建复制区域,使用Spring Data GemFire加载区域。一旦Spring Boot应用程序终止,我就看不到集群中的区域/数据。
我错过了什么吗?
GemFire集群没有使用cache. xml
或SpringXML来引导区域。我的想法是通过一个独立的程序创建区域并使其在集群中可用。SDGF版本是2.0.7
。
gefire-config. xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:gfe="http://www.springframework.org/schema/gemfire"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/gemfire http://www.springframework.org/schema/gemfire/spring-gemfire.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<util:properties id="gemfireProperties">
<prop key="locators">unix_machine1[10334],unix_machine2[10334]</prop>
<prop key="mcast-port">0</prop>
</util:properties>
<bean id="autoSerializer" class="org.apache.geode.pdx.ReflectionBasedAutoSerializer">
<gfe:cache properties-ref="gemfireProperties" pdx-serializer-ref="autoSerializer" pdx-read-serialized="true"/>
<gfe:replicated-region id="Test" ignore-if-exists="true"/>
<gfe:replicated-region id="xyz" ignore-if-exists="true"/>
</beans>
期望是当Spring Boot应用程序终止时,应在集群中创建Region。
这里最简单的方法是使用集群配置服务,并通过gfsh创建区域。有关详细信息,请参阅以下链接
https://docs.spring.io/spring-gemfire/docs/current/reference/html/#bootstrap:cache:advanced
请参阅使用基于集群的配置部分
有关集群配置的更多信息,请参阅以下链接
http://gemfire.docs.pivotal.io/97/geode/configuring/cluster_config/gfsh_persist.html
您的客户端代码可能是一个连接到gefire集群的简单gefire客户端。
你的期望是不正确的。这不是Spring的限制,而是GemFire工作方式的副作用。
如果要使用GemFireAPI或纯cache. xml
配置集群的GemFire对等缓存实例/成员,则集群也不会“记住”该配置。
当使用GemFireAPI、cache. xml
或Spring配置(SpringXML或JavaConfig)时,配置是成员本地的。在GemFire的Cluster Configuration Service之前,管理员需要将配置(例如cache.xml
)分布在将形成集群的所有对等成员之间。
然后出现了集群配置服务,它使用户能够使用Gfsh定义他们的配置。在Spring config中,当配置/无融资创业集群的对等缓存成员时,您可以启用集群配置来配置成员,例如:
<gfe:cache use-cluster-configuration="true" ... />
正如这里所指出的(第4项)。
但是,使用Gfsh配置每个GemFire对象(区域
、索引
、DiskStores
等)可能非常乏味,尤其是如果您有很多区域。此外,并非所有开发人员都想使用shell工具。一些开发团队希望与应用程序一起版本配置,这很有意义。
鉴于您正在使用Spring Boot,您应该在此处查看Pivotal GemFire的Spring Boot。
启动集群的另一种方法是使用Spring而不是Gfsh配置和引导成员。我这里有一个例子。当然,您可以使用Spring Boot FAT JAR从命令行运行Spring Boot应用程序。
当然,一些管理员/操作员阻止开发团队以这种方式无融资创业,而是希望团队使用数据库提供的工具(例如Gfsh)。
如果这是您的情况,那么开发Spring Boot、GemFireClientCache
应用程序连接到使用Gfsh启动的独立集群可能会更好。
您仍然可以执行非常小的配置,例如:
start locator --name=LocatorOne
start server --name=ServerOne
start server --name=ServerTwo
...
然后让您的Spring Boot、客户端应用程序使用SDG的集群配置推送功能驱动集群的配置(即区域、索引等)。
有许多不同的选择,所以选择是你的。你需要决定哪一个最适合你的需求。
希望这有帮助。