提问者:小点点

无法使用Spring Data Geode/Gemfire创建全局区域


从Spring data Geode/gemfire,我们可以在集群上创建区域吗?目前它正在创建本地缓存区域,但在ClientCache模式或ServerCache模式下完成的任何配置都不会对集群服务器产生任何影响。

但是使用gfsh命令,如果我们创建一个REPLICATE Region,那么连接就可以正常工作。这是在Gemfire/Geode集群中创建REPLICATE区域的唯一方法吗?

接下来,有许多留档是指具有GLOBAL范围的区域,但在gfsh中,没有办法创建具有GLOBAL范围的区域,我也无法通过Spring数据网格定位任何配置。

我们对此有什么补充信息吗?

问候马来亚

搜索了Geode/Gemfire留档中的任何命令,但没有找到。

尝试适应Spring数据大地/gefire,但即使在那里也没有GLOBAL区域创建的选项。


共1个答案

匿名用户

Spring Data for Apache Geode(SDG)支持使用SDG Cluster Configuration Push功能将Apache Geode区域(和其他Apache Geode对象,例如索引)的配置元数据推送到服务器集群。但是,此功能目前仅将区域“名称”和DataPolicy类型(Javadoc)从客户端推送到服务器。

此外,“集群配置推送”仅适用于您的Spring[Boot]数据应用程序是Apache GeodeClientCache时。如果应用程序是对等Cache,则此功能不适用。

注意:Apache Geode(SBDG)的Spring Boot在SDG的集群配置推送功能之上应用了附加功能。请参阅此处。同样,这仅适用于客户端。

首先,AFAIR,Scope.GLOBAL区域仅适用于REPLICATE区域。也就是说,您不能创建“GLOBAL”PARTITION区域。有关Scope以及其他区域分布配置属性的更多详细信息,请参阅Apache Geode文档。

假设您的Apache Geode应用程序的Spring[Boot]数据是对等Cache实例,那么您可以使用“GLOBAL”Scope配置您的REPLICATE区域,如下所示:

// Alternatively, you can use @CacheServerApplication
@PeerCacheApplication(name = "MySpringGeodeServer")
class MySpringDataGeodeApplication {

  @Bean("MyRegion")
  ReplicatedRegionFactoryBean myReplicateRegion(GemFireCache cache) {

    ReplicatedRegionFactoryBean region = new ReplicatedRegionFactoryBean();

    region.setCache(cache);
    region.setScope(Scope.GLOBAL);

    return region;
  }
}

但是,请记住这个对等Cache,Spring配置的服务器应用程序不会将配置推送到集群中的其他服务器。

如果您使用基于SDG注释的配置来(动态

这可能看起来像下面这样。

给定一个持久实体:

@Region("Customers")
class Customer { 
  // ...
}

然后:

@CacheServerApplication(name = "MySpringGeodeServer")
@EnableEntityDefinedRegions(
  basePackageClasses = Customer.class,
  serverRegionShortcut = RegionShortcut.REPLICATE
)
class MySpringDataGeodeApplication {

  @Bean
  RegionConfigurer customerRegionConfigurer() {

    return new RegionConfigurer() {

      @Override
      public void configure(String beanName, PeerRegionFactoryBean<?, ?> region) {

        if ("Customers".equals(beanName)) {
          ((ReplicatedRegionFactoryBean) region).setScope(Scope.GLOBAL);
        }
      }

    }
  }
}

注意:或者,如果您需要像这样对Region(bean)配置进行细粒度控制,那么无论如何,您应该简单地使用基于Java的配置,而不是注释。基于注释的配置主要是为了方便而提供的;无论如何,它都不是一刀切的。

从技术上讲,您还可以使用1个特定于区域类型的映射注释(Javadoc)来注释您的持久实体类(例如客户),而不仅仅是通用的@Region映射注释,例如使用@ReplicateRegion。这允许您执行以下操作:

@ReplicateRegion(name = "Customers", scope = Scope.GLOBAL)
class Customer {
  // ...
}

尽管如此,我通常更喜欢用户简单地使用通用的@Region映射注释,同样,如果他们需要对区域进行低级配置(例如在REPLICATE区域上设置“Scope”),那么只需使用基于Java的配置,如开头的示例所示。

不过,请记住,这些都不会在同一集群内的其他服务器之间共享。Spring对等缓存应用程序根本不会将配置元数据推送到其他服务器,也永远不会。无论如何,这就是使用Apache Geode集群配置服务的一点。

注意:可以启用SDG对等缓存应用程序(默认禁用)以使用Apache Geode的集群配置服务从现有集群继承配置。例如,请参阅PeerCacheApplication注释上的useClusterConfiguration属性(Javadoc)。SDG默认禁用此对等/服务器端功能有充分的理由。

查看这个和这个(不是说Scope无论如何都可以在Region上“更改”),你是正确的,当使用Gfsh时,你不能在集群中创建GLOBALScopedREPLICATERegion,:(

一般来说,请记住,任何可能与Apache Geode的API有关的事情,您都可以使用Spring(Boot/Data)for Apache Geode等等。

这在很大程度上是因为SDG是建立在Apache Geode的API上的,而不是像Gfsh这样的工具。