7.6. 配置自定义合并策略
配置 Data Grid,以便在处理网络分区时使用 EntryMergePolicy
API 的自定义实现。
先决条件
实施
EntryMergePolicy
API。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
# List implementations of EntryMergePolicy with the full qualified class name org.example.CustomMergePolicy
Copy 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());