【问题标题】:Unable to create Global region using Spring Data Geode/Gemfire无法使用 Spring Data Geode/Gemfire 创建全局区域
【发布时间】:2022-12-03 07:42:09
【问题描述】:

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

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

接下来,有许多文档提到具有 GLOBAL 范围的区域,但在 gfsh 中同样无法创建具有 GLOBAL 范围的区域,我也无法通过 Spring data geode 找到任何配置。

我们有关于此的任何其他信息吗?

问候, 马来亚

搜索有关任何命令的 Geode/Gemfire 文档,但找不到任何命令。

试图调整 spring data geode/gemfire 但即使那里也没有创建 GLOBAL 区域的选项。

【问题讨论】:

    标签: spring spring-boot geode spring-data-gemfire


    【解决方案1】:

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

    此外, ”集群配置推送" 仅当您的 Spring [Boot] Data 应用程序是 Apache Geode ClientCache 时才适用。如果应用程序是同级 Cache,则此功能不会不是申请。

    笔记:适用于 Apache Geode 的 Spring Boot(SBDG) 在 SDG 之上应用附加功能集群配置推送特征。参见here。同样,这仅适用于客户。

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

    假设您的 Spring [Boot] Data for Apache Geode 应用程序是一个对等 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;
      }
    }
    

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

    如果您使用 SDG Annotation-based configuration(动态且方便地)在您的 Spring peer Cache 应用程序中创建区域,例如:使用 @EnableEntityDefinedRegions 或 @EnableCachingDefinedRegions,那么您将需要另外依赖 1 个或多个RegionConfigurer bean 定义(请参阅docs)以自定义各个区域的配置,因为基于注释的支持不会启用这种性质的细粒度区域配置自定义(例如 Scope REPLICATE 区域)。

    这可能类似于以下内容。

    给定一个持久实体:

    @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);
            }
          }
    
        }
      }
    }
    

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

    从技术上讲,您还可以使用区域类型特定的 @Region 映射注释 (Javadoc) 中的 1 个来注释持久实体类(例如 Customer),例如 @ReplicateRegion。然后,您可以执行以下操作:

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

    不过,如果用户一般只使用 @Region 映射注释,我还是更喜欢它,如果他们需要对区域进行低级配置(比如在 REPLICATE 区域上设置“Scope”),那么只需使用作为开头示例演示的基于 Java 的配置。

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

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

    在查看this 和this(并不是说Scope 是你可以在事后“改变”的东西),你是正确的,当使用 Gfsh 时,你不能在簇, :(

    一般来说,请记住,任何可以用 Apache Geode 的 API 做的事情,你绝对可以用 Spring (Boot/Data) for Apache Geode 来做,然后再做一些。

    这在很大程度上是因为 SDG 是基于 Apache Geode 的 API 构建的,而不是某些工具,比如Gfsh.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多