我们正在使用Gemfire WAN拓扑,但在设置网关发件人时遇到了问题。
几个假设: - 复制区域 - 串行网关发件人 - 所有网关发件人的手动启动均为假
假设我们有2个集群,在每个集群中,我们有2个成员(成员A和成员B)
会员A的cache.xml
<gfe:gateway-sender id="gateway-sender-A" parallel="false" remote-distributed-system-id="2" manual-start="false" />
<gfe:replicated-region name="data" scope="DISTRIBUTED_NO_ACK">
<gfe:replicated-region name="subData" data-policy="REPLICATE" scope="DISTRIBUTED_ACK">
<gfe:gateway-sender-ref bean="gateway-sender-A"/>
</gfe:replicated-region>
</gfe:replicated-region>
会员B的cache.xml
<gfe:gateway-sender id="gateway-sender-B" parallel="false" remote-distributed-system-id="2" manual-start="false" />
<gfe:replicated-region name="data" scope="DISTRIBUTED_NO_ACK">
<gfe:replicated-region name="subData" data-policy="REPLICATE" scope="DISTRIBUTED_ACK">
<gfe:gateway-sender-ref bean="gateway-sender-B"/>
</gfe:replicated-region>
</gfe:replicated-region>
当我们在一个群集中启动两个成员时出现问题。它引发了这个错误:
java.lang.IllegalStateException:无法使用[gateway-sender-A]网关发件人ID创建区域/数据,因为另一个缓存具有使用[gateway-sender-B]网关发件人ID定义的相同区域
查看网关发件人的高可用性&#34;文档,我们的理解是我们可以创建2个网关发件人,其中只有一个将在给定时间点进行发送。最终,我们希望为一个缓存区域提供2个网关发件人(每个成员一个),一个作为主发件人,另一个作为辅助发件人。
由于
答案 0 :(得分:0)
来自Geode documentation,它说
对于串行发件人,队列HA是通过在多个成员中配置相同的串行发件人来实现的。队列在成员之间复制。
因此,如果成员A和B中的两个网关发件人正在执行相同的工作(除了他们的主要/次要角色),您应该使用&#34;相同的&#34;设置。
在网关发件人中,会有一个设法获取特定的分布式锁并成为主要发件人,通常是第一个出现。我没有看到房产迫使一个人成为小学。
如果你想知道,Geode是Gemfire的开源版本。
答案 1 :(得分:0)
将两个成员的sender-id更改为相同后,我们还有另一个问题:
java.lang.IllegalStateException:无法创建Gateway Sender &#34;一些网关发送方-ID&#34;手动启动&#34; false&#34;因为另一个 缓存具有与手动启动相同的网关发件人&#34; true
似乎我们的问题是格式不一致。
会员A使用XML格式
<?xml version="1.0"?>
<!DOCTYPE cache PUBLIC "-//GemStone Systems, Inc.//GemFire Declarative Caching 8.0//EN" "http://www.gemstone.com/dtd/cache8_0.dtd">
会员B使用Spring Gemfire Data格式
xmlns:gfe="http://www.springframework.org/schema/gemfire" xsi:schemaLocation="http://www.springframework.org/schema/gemfire http://www.springframework.org/schema/gemfire/spring-gemfire.xsd">
<gfe:gateway-sender ...>
我们切换到为两个成员使用Spring Gemfire数据格式,它解决了这两个问题。