0

我正在开发一个非常简单的仪表板来清除 Gemfire 区域以进行测试。我这样做主要是为了让测试人员自己做这件事的工具。

我想动态获取当前可用的区域名称以清除。

我正在搜索 spring-data-gemfire 文档,但找不到获取所有区域名称的方法。

到目前为止我最好的提示是<gfe:auto-region-lookup/>,但我想我仍然需要一个包含所有区域名称的 cache.xml,而且我不确定如何动态显示它们的名称以及如何从这些区域中删除所有数据。

谢谢

4

1 回答 1

1

<gfe:auto-region-lookup>旨在为ApplicationContext在 Spring 上下文之外显式创建的所有 GemFire 区域(即cache.xml或使用 GemFire 相对较新的基于集群的配置服务)在 Spring 中自动创建 bean。但是,开发人员必须使用和/或启用这些机制来使用该auto-region-lookup功能。

要获取 GemFire“集群”中所有区域名称的列表,您需要与Gfsh 的 'list region'命令等效的内容,该命令使用一个函数来收集 GemFire(缓存)集群中定义的所有区域。

请注意,成员可以定义不同的区域,即参与集群的所有成员不一定必须定义相同的区域。在大多数情况下,他们这样做是因为它有利于复制和 HA 目的。仍然有一些成员可以定义只有该成员将使用的本地区域。

要继续从列表中清除区域,您将再次需要使用 GemFireFunction来“清除”集群中查询的代理成员当前未定义的其他区域。

当然,如果您只想清除在成员本身上定义的区域,这个问题真的很简单......

@Autowired
private Cache gemfireCache;
...

public void clearRegions() {
  for (Region rootRegion : gemfireCache.rootRegions()) {
    for (Region subRegion : rootRegion.subregions(true)) {
      subRegion.clear();
    }
    rootRegion.clear());
  }
}

有关更多详细信息,请参见rootRegions()subregions(recursive:boolean)

注意,GemFire 的Cache接口实现了RegionService接口。

希望这可以帮助。

干杯!

于 2015-08-26T16:22:39.703 回答