如何使用ClientCache在所有群集/实例上发布GemFire

时间:2018-01-04 08:50:41

标签: java gemfire clientcache

我们有3个集群(美国,欧盟,美联社),每个集群有2个主机(一个主要,其他次要)

如果有更新,则每个群集的主要主机会更新同一群集中的辅助主机。但群集不会相互交谈。

我们有一个流程需要更新在每个群集的主要主机上运行的所有3个GemFire缓存(最终将更新辅助主机GemFire)

cache-cluster-1.xml 
   <client-cache>
     <pool name="clientCachePool" read-timeout="90000" >
        <server host="pri1-hostname" port="1111"  />
        <server host="sec1-hostname" port="1111"  />
     </pool>
     <region>...</region>
   <client-cache>

cache-cluster-2.xml 
   <client-cache>
     <pool name="clientCachePool" read-timeout="90000" >
        <server host="pri2-hostname" port="1111"  />
        <server host="sec2-hostname" port="1111"  />
     </pool>
     <region>...</region>
   <client-cache>

cache-cluster-3.xml 
   <client-cache>
     <pool name="clientCachePool" read-timeout="90000" >
        <server host="pri3-hostname" port="1111"  />
        <server host="sec3-hostname" port="1111"  />
     </pool>
     <region>...</region>
   <client-cache>
  

如果我尝试初始化单独的ClientCache,我会收到以下错误 -   的&GT; java.lang.IllegalStateException:与分布式系统的连接   已存在于此VM中。

ClientCache cc1 = ccf.set("cache-xml-file", "cache-cluster-1.xml").create(); 
ClientCache cc2 = ccf.set("cache-xml-file", "cache-cluster-2.xml").create(); 
ClientCache cc3 = ccf.set("cache-xml-file", "cache-cluster-3.xml").create();

如何使用ClientCache发布到这三个独立的群集?

2 个答案:

答案 0 :(得分:1)

在单个JVM中不能有多个Cache的实例,这是因为它在内部工作为singleton。此外,非常不鼓励将单个客户端连接到多个分布式系统,因为您可能遇到其他问题,特别是不兼容的类定义和/或命名空间冲突。

然而,GemFire / GEODE附带了一个嵌入式机制来实现这个用例:Multi-site (WAN) Configuration,它基本上允许您在不同的,松散耦合的分布式系统之间水平扩展。

希望这有帮助。

最佳电子广告

答案 1 :(得分:1)

在打开cc2之前关闭cc1,然后在打开cc3之前关闭cc2。

如果您真的必须访问其他群集中的数据,那么: - 如果您需要来自其他群集中的区域的所有数据,请考虑使用WAN网关 - 如果您只需要从其他群集中的区域中选择数据,请考虑CQRS设计,其中您有另一个进程针对远程群集运行CQ(连续查询)并使用结果更新您的近群集。