Infinispan失效缓存集群部署遇ISPN000615反序列化异常求助
核心原因
尽管INVALIDATION_ASYNC模式主要发送失效消息而非缓存数据,但Infinispan在集群初始化、拓扑变更或内部元数据同步时,仍可能传递包含java.util.LinkedHashMap的对象。若PROTOSTREAM编组器未注册该类型的默认处理逻辑,就会触发反序列化失败。
无需自定义Marshaller的解决步骤
全局配置PROTOSTREAM并注册默认类型初始化器
在Wildfly的standalone.xml或domain.xml中,确保缓存容器的序列化配置明确使用PROTOSTREAM,并添加默认上下文初始化器(包含常用Java集合类型的编组定义):<cache-container name="your-cache-container" default-cache="your-cache" module="org.wildfly.clustering.infinispan"> <transport lock-timeout="60000"/> <serialization marshaller="PROTOSTREAM"> <!-- 注册默认Java类型的编组初始化器 --> <context initializers="org.infinispan.protostream.impl.DefaultContextInitializer"/> </serialization> <invalidation-cache name="your-cache" mode="ASYNC"> <locking isolation="REPEATABLE_READ"/> <transaction mode="NON_XA"/> </invalidation-cache> </cache-container>检查缓存级序列化配置
确保目标INVALIDATION缓存未单独指定其他编组器,避免覆盖全局配置。若缓存有单独的<serialization>节点,需保证其marshaller属性值为PROTOSTREAM,或直接移除该节点继承全局设置。确认依赖有效性
Wildfly 25自带的org.wildfly.clustering.infinispan模块已包含infinispan-protostream依赖。若为自定义部署,pom.xml中需引入对应依赖并设置providedscope(避免冲突):<dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-protostream</artifactId> <version>12.1.7.Final</version> <!-- Wildfly 25对应Infinispan版本 --> <scope>provided</scope> </dependency>清理缓存残留文件
停止所有集群节点,删除Wildfly安装目录下tmp和data文件夹中的缓存相关文件,避免旧序列化元数据干扰,随后重启集群。检查缓存加载器/存储配置
若使用了JDBC缓存存储等自定义持久化组件,需确保其序列化设置与全局PROTOSTREAM配置一致,禁止混用不同编组器。
内容的提问来源于stack exchange,提问作者sprockets

