7.6. 配置自定义合并策略


在处理网络分区时,将 Data Grid 配置为使用 EntryMergePolicy API 的自定义实现。

先决条件

  • 实现 EntryMergePolicy API。

    public class CustomMergePolicy implements EntryMergePolicy<String, String> {
    
       @Override
       public CacheEntry<String, String> merge(CacheEntry<String, String> preferredEntry, List<CacheEntry<String, String>> otherEntries) {
          // Decide which entry resolves the conflict
    
          return the_solved_CacheEntry;
       }

流程

  1. 如果使用远程缓存,请将合并策略实施部署到 Data Grid 服务器。

    1. 将您的类打包为 JAR 文件,其中包含 META-INF/services/org.infinispan.conflict.EntryMergePolicy 文件,其中包含合并策略的完全限定域名。

      # List implementations of EntryMergePolicy with the full qualified class name
      org.example.CustomMergePolicy
    2. 将 JAR 文件添加到 server/lib 目录。

      提示

      使用带有 Data Grid 命令行界面(CLI)的 install 命令,将 JAR 下载到 server/lib 目录。

  2. 打开 Data Grid 配置以进行编辑。
  3. 根据情况,使用 encoding 元素或 encoding () 方法配置缓存编码。

    对于远程缓存,如果您只使用对象元数据在合并条目时进行比较,您可以使用 application/x-protostream 作为介质类型。在这种情况下,Data Grid 将条目返回到 EntryMergePolicy 作为 byte[]

    如果您需要合并冲突时对象本身,您应该使用 application/x-java-object 介质类型配置缓存。在这种情况下,您必须将相关的 ProtoStream marshallers 部署到 Data Grid Server,以便在客户端使用 Protobuf 编码时执行 byte[] 到对象转换。

  4. 使用 merge-policy 属性或 mergePolicy () 方法指定自定义合并策略,作为分区处理配置的一部分。
  5. 保存您的更改。

自定义合并策略配置

XML

<distributed-cache name="mycache">
   <partition-handling when-split="DENY_READ_WRITES"
                       merge-policy="org.example.CustomMergePolicy"/>
</distributed-cache>

JSON

{
  "distributed-cache": {
    "partition-handling" : {
      "when-split": "DENY_READ_WRITES",
      "merge-policy": "org.example.CustomMergePolicy"
    }
  }
}

YAML

distributedCache:
  partitionHandling:
    whenSplit: DENY_READ_WRITES
    mergePolicy: org.example.CustomMergePolicy

ConfigurationBuilder

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering().cacheMode(CacheMode.DIST_SYNC)
       .partitionHandling()
       .whenSplit(PartitionHandling.DENY_READ_WRITES)
       .mergePolicy(new CustomMergePolicy());

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.