WildFly 10与Infinispan 8分布式缓存put/get操作异常求助
嘿,我来帮你搞定这个缓存put/get失效的问题!结合你用的WildFly 10.0.0.Final + Infinispan 8.1.0.Final环境,还有你给出的配置步骤,咱们一步步排查可能的坑:
你用@Resource(lookup = "...")来获取缓存,但你之前的CLI命令里没给缓存配置JNDI名称,这就导致你lookup到的可能不是你定义的default_cache,甚至是个无效实例。
赶紧执行这条CLI命令给你的缓存加上JNDI绑定:
/subsystem=infinispan/cache-container=infinispan_cache/replicated-cache=default_cache:write-attribute(name=jndi-name, value="java:jboss/infinispan/cache/infinispan_cache/default_cache")
执行完后,要么重启节点,要么用这条命令重载配置:
:reload()
之后你的Java代码里的lookup路径要和这个JNDI名对应,比如:
@Resource(lookup = "java:jboss/infinispan/cache/infinispan_cache/default_cache") private Cache<String, Object> defaultCache;
你用的是standalone-full-ha模式,要是两个节点没组成集群,异步复制的缓存肯定没法正常工作,甚至本地操作都可能出问题。
- 先检查两个节点的绑定地址配置,确保它们在同一网络,没有防火墙拦截WildFly集群默认的7600端口(TCP栈用的端口),可以用
telnet 节点IP 7600测试连通性。 - 去节点的
standalone/log/server.log里搜JGRP关键词,要是看到joined cluster的日志,说明集群组建成功;要是有failed to join的报错,就得调整集群传输的配置了。
你设置了start=LAZY,这意味着缓存容器只有在第一次被访问时才会启动。如果你的代码在服务器启动初期就去lookup缓存,很可能拿到的是未初始化的实例。
改成EAGER模式让缓存容器随服务器一起启动:
/subsystem=infinispan/cache-container=infinispan_cache:write-attribute(name=start, value=EAGER)
执行这条CLI命令查看完整的缓存配置,确认所有参数都正确:
/subsystem=infinispan/cache-container=infinispan_cache:read-resource(recursive=true)
重点检查这几个点:
transport的stack是不是tcp,lock-timeout是不是60000replicated-cache=default_cache的mode是不是ASYNC- 有没有刚才配置的
jndi-name
确保你的代码操作缓存的方式没问题,比如写个简单的EJB测试:
@Stateless public class CacheTestService { @Resource(lookup = "java:jboss/infinispan/cache/infinispan_cache/default_cache") private Cache<String, String> testCache; public void saveData(String key, String value) { testCache.put(key, value); System.out.println("已写入缓存:" + key + " -> " + value); } public String getData(String key) { String value = testCache.get(key); System.out.println("从缓存读取:" + key + " -> " + value); return value; } }
调用这个服务的方法,同时看两个节点的日志,确认数据能不能正常写入和读取。
要是前面几步都没解决,就调高Infinispan的日志级别,看具体的报错信息:
/subsystem=logging/logger=org.infinispan:add(level=DEBUG)
重新执行put/get操作,去server.log里找DEBUG级别的日志,比如有没有CacheNotStartedException这类明确的错误提示。
内容的提问来源于stack exchange,提问作者Germán Faller

