You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WildFly 10与Infinispan 8分布式缓存put/get操作异常求助

嘿,我来帮你搞定这个缓存put/get失效的问题!结合你用的WildFly 10.0.0.Final + Infinispan 8.1.0.Final环境,还有你给出的配置步骤,咱们一步步排查可能的坑:

1. 先补全缓存的JNDI绑定(大概率是核心问题)

你用@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;
2. 确认集群节点真的连通了

你用的是standalone-full-ha模式,要是两个节点没组成集群,异步复制的缓存肯定没法正常工作,甚至本地操作都可能出问题。

  • 先检查两个节点的绑定地址配置,确保它们在同一网络,没有防火墙拦截WildFly集群默认的7600端口(TCP栈用的端口),可以用telnet 节点IP 7600测试连通性。
  • 去节点的standalone/log/server.log里搜JGRP关键词,要是看到joined cluster的日志,说明集群组建成功;要是有failed to join的报错,就得调整集群传输的配置了。
3. 调整缓存容器的启动模式

你设置了start=LAZY,这意味着缓存容器只有在第一次被访问时才会启动。如果你的代码在服务器启动初期就去lookup缓存,很可能拿到的是未初始化的实例。

改成EAGER模式让缓存容器随服务器一起启动:

/subsystem=infinispan/cache-container=infinispan_cache:write-attribute(name=start, value=EAGER)
4. 验证你的缓存配置是否真的生效了

执行这条CLI命令查看完整的缓存配置,确认所有参数都正确:

/subsystem=infinispan/cache-container=infinispan_cache:read-resource(recursive=true)

重点检查这几个点:

  • transport的stack是不是tcp,lock-timeout是不是60000
  • replicated-cache=default_cache的mode是不是ASYNC
  • 有没有刚才配置的jndi-name
5. 用简单代码测试缓存操作

确保你的代码操作缓存的方式没问题,比如写个简单的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;
    }
}

调用这个服务的方法,同时看两个节点的日志,确认数据能不能正常写入和读取。

6. 开Debug日志找细节

要是前面几步都没解决,就调高Infinispan的日志级别,看具体的报错信息:

/subsystem=logging/logger=org.infinispan:add(level=DEBUG)

重新执行put/get操作,去server.log里找DEBUG级别的日志,比如有没有CacheNotStartedException这类明确的错误提示。


内容的提问来源于stack exchange,提问作者Germán Faller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:15:17