7.6. 配置自定义合并策略
配置 Data Grid,以便在处理网络分区时使用 EntryMergePolicy API 的自定义实现。
先决条件
实施
EntryMergePolicyAPI。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
如果使用远程缓存,请将您的合并策略实施部署到 Data Grid Server。
将您的类打包为 JAR 文件,该文件中包含
META-INF/services/org.infinispan.conflict.EntryMergePolicy文件,该文件包含合并策略的完全限定域名。# List implementations of EntryMergePolicy with the full qualified class name org.example.CustomMergePolicy
# 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 配置进行编辑。
根据具体情况,使用编码元素或
方法配置缓存编码。encoding()对于远程缓存,如果您只使用对象元数据在合并条目时进行比较,您可以使用
application/x-protostream作为介质类型。在这种情况下,Data Grid 会将条目返回到EntryMergePolicy,存为byte[]。如果您在合并冲突时要求对象本身,则您应该使用
application/x-java-object介质类型配置缓存。在这种情况下,您必须将相关的 ProtoStream marshallers 部署到 Data Grid 服务器,以便在客户端使用 Protobuf 编码时,它就可以对对象执行字节[]。-
使用
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());