0

我们有 3 个集群(美国、欧盟、AP),每个集群有 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,则会出现以下错误 - > 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 发布到这三个独立的集群?

4

2 回答 2

1

在打开cc2之前关闭你的cc1,在打开cc3之前关闭cc2。

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

于 2018-01-04T13:52:45.853 回答
1

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

然而,GemFire/GEODE ​​带有一个嵌入式机制来实现这个用例:多站点 (WAN) 配置,它基本上允许您在不同的、松散耦合的分布式系统之间进行水平扩展。

希望这可以帮助。

最好的问候

于 2018-01-04T09:17:11.387 回答