我们有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发布到这三个独立的群集?
答案 0 :(得分:1)
在单个JVM中不能有多个Cache
的实例,这是因为它在内部工作为singleton。此外,非常不鼓励将单个客户端连接到多个分布式系统,因为您可能遇到其他问题,特别是不兼容的类定义和/或命名空间冲突。
然而,GemFire / GEODE附带了一个嵌入式机制来实现这个用例:Multi-site (WAN) Configuration,它基本上允许您在不同的,松散耦合的分布式系统之间水平扩展。
希望这有帮助。
最佳电子广告
答案 1 :(得分:1)
在打开cc2之前关闭cc1,然后在打开cc3之前关闭cc2。
如果您真的必须访问其他群集中的数据,那么: - 如果您需要来自其他群集中的区域的所有数据,请考虑使用WAN网关 - 如果您只需要从其他群集中的区域中选择数据,请考虑CQRS设计,其中您有另一个进程针对远程群集运行CQ(连续查询)并使用结果更新您的近群集。