我想使用两个Wildfly独立实例的复制Infinispan缓存。我想在一个节点上插入一个值,我应该能够在另一个节点上读取它。如何在Wildfly standalone-full-ha中使用复制的Infinispan缓存
这里是我的尝试:
- 我解压使用两个不同的虚拟 maschines运行Debian杰西全WF10分布。
- 我使用standalone-full-ha.xml配置运行两台maschines。
- 我将绑定从localhost更改为虚拟机的IP地址 - 所有端口均可从外部访问。
- 我通过以下代码插入到配置添加另一个缓存:
<subsystem xmlns="urn:jboss:domain:infinispan:4.0">
<cache-container name="monitor" default-cache="default">
<transport lock-timeout="60000"/>
<replicated-cache name="default" mode="SYNC">
<transaction mode="BATCH"/>
</replicated-cache>
</cache-container>
...
- 的结构的其余部分不被修改。
- 在两个节点上,我得到以下日志项(我的解释是 - 两个节点看到对方):
2016-03-13 11:19:43,160 INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (MSC service thread 1-1) ISPN000094: Received new cluster view for channel monitor: [wf1|5] (2) [wf1, wf2]
- 在一个节点上我创建了一个高速缓存作家。在其他节点的缓存 读者部署:
@Singleton
@Startup
public class CacheWriter {
private final static Logger LOG = LoggerFactory.getLogger(CacheWriter.class);
@Resource(lookup = "java:jboss/infinispan/container/monitor")
private EmbeddedCacheManager cacheManager;
private Cache<String, String> cache;
@PostConstruct
public void init() {
cache = cacheManager.getCache();
LOG.info("Cache name: " + cache.getName());
}
@Schedule(hour = "*", minute = "*", second = "0", persistent = false)
public void createDateString() {
Long date = new Date().getTime();
updateCache("date", date.toString());
}
public void updateCache(String key, String value) {
if (cache.containsKey("date")) {
LOG.info("Update date value: " + value);
cache.put(key, value);
} else {
LOG.info("Create date value: " + value);
cache.put(key, value);
}
}
}
@Singleton
@Startup
public class CacheReader {
private final static Logger LOG = LoggerFactory.getLogger(CacheReader.class);
@Resource(lookup = "java:jboss/infinispan/container/monitor")
private EmbeddedCacheManager cacheManager;
private Cache<String, String> cache;
@PostConstruct
public void init() {
cache = cacheManager.getCache();
LOG.info("Cache name: " + cache.getName());
}
@Schedule(hour = "*", minute = "*", second = "10", persistent = false)
public void readDateString() {
LOG.info("Cache size: " + cache.keySet().size());
if (cache.containsKey("date")) {
LOG.info("The date value is: " + cache.get("date"));
} else {
LOG.warn("No date value found");
}
}
}
对作家的值插入,但也有读者节点和缓存大小上没有缓存的修改总是0。我试过TCP和UDP堆栈。我错过了什么?你可以帮我吗。
在此先感谢。
不getCacheName返回相同的名字吗?当我使用高速缓存管理器时,我通常会要求提供明确指定的高速缓存 –
您也可以尝试使用其中一个现有高速缓存管理器,例如ejb –
两个节点上的高速缓存名称相同,并且将注入的高速缓存更改为ejb也无济于事 - 所以没有成功。 –