我们有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,那么下面是error - > 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向这三个独立集群发布?
发布于 2018-01-04 13:52:45
在打开cc1之前关闭cc2,在打开cc3之前关闭cc2。
如果您确实必须访问其他集群中的数据,那么:-如果您需要来自其他集群中区域的所有数据,请考虑广域网网关--如果您只需要从另一个集群中的区域中选择数据,那么请考虑CQRS设计,其中您有另一个进程针对远程集群运行CQ (连续查询),并根据结果更新您附近的集群。
发布于 2018-01-04 09:17:11
在单个JVM中不能有多个Cache实例,这是因为在内部它作为一个辛格尔顿工作。此外,由于您可能遇到其他问题,特别是不兼容的类定义和/或命名空间冲突,因此非常不鼓励将单个客户端连接到多个分布式系统。
然而,GemFire/GEODE提供了一种嵌入式机制来实现这个用例:多站点(WAN)配置,它基本上允许您在完全不同、松散耦合的分布式系统之间进行水平扩展。
希望这能有所帮助。
最佳领队
https://stackoverflow.com/questions/48091673
复制相似问题