7.6. 配置自定义合并策略
在处理网络分区时,将 Data Grid 配置为使用 EntryMergePolicy API 的自定义实现。
先决条件
实现
EntryMergePolicyAPI。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
如果使用远程缓存,请将合并策略实施部署到 Data Grid 服务器。
将您的类打包为 JAR 文件,其中包含
META-INF/services/org.infinispan.conflict.EntryMergePolicy文件,其中包含合并策略的完全限定域名。List implementations of EntryMergePolicy with the full qualified class name
# List implementations of EntryMergePolicy with the full qualified class name org.example.CustomMergePolicyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 JAR 文件添加到
server/lib目录。提示使用带有 Data Grid 命令行界面(CLI)的
install命令,将 JAR 下载到server/lib目录。
- 打开 Data Grid 配置以进行编辑。
根据情况,使用
encoding元素或encoding ()方法配置缓存编码。对于远程缓存,如果您只使用对象元数据在合并条目时进行比较,您可以使用
application/x-protostream作为介质类型。在这种情况下,Data Grid 将条目返回到EntryMergePolicy作为byte[]。如果您需要合并冲突时对象本身,您应该使用
application/x-java-object介质类型配置缓存。在这种情况下,您必须将相关的 ProtoStream marshallers 部署到 Data Grid Server,以便在客户端使用 Protobuf 编码时执行byte[]到对象转换。-
使用
merge-policy属性或mergePolicy ()方法指定自定义合并策略,作为分区处理配置的一部分。 - 保存您的更改。
自定义合并策略配置
XML
<distributed-cache name="mycache">
<partition-handling when-split="DENY_READ_WRITES"
merge-policy="org.example.CustomMergePolicy"/>
</distributed-cache>
<distributed-cache name="mycache">
<partition-handling when-split="DENY_READ_WRITES"
merge-policy="org.example.CustomMergePolicy"/>
</distributed-cache>
JSON
YAML
distributedCache:
partitionHandling:
whenSplit: DENY_READ_WRITES
mergePolicy: org.example.CustomMergePolicy
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());
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.clustering().cacheMode(CacheMode.DIST_SYNC)
.partitionHandling()
.whenSplit(PartitionHandling.DENY_READ_WRITES)
.mergePolicy(new CustomMergePolicy());