Gemfire WAN网关 - 发件人配置

时间:2016-12-16 22:06:03

标签: gemfire spring-data-gemfire

我们正在使用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个网关发件人(每个成员一个),一个作为主发件人,另一个作为辅助发件人。

由于

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数据格式,它解决了这两个问题。

TL; DR,网关发件人如果在同一个集群中并且使用一致的缓存xml格式,则需要具有相同的ID。