我在我的应用程序中使用 Spring ObjectGridClientBean 来访问 eXtreme Scale 分布式对象网格。
服务器启动后 - 它工作正常,能够从缓存中读取/写入;但过了一段时间(我相信大约是 1 小时)它变得无响应 - 意思是,无法从/向缓存读取/写入任何内容。
//Setup
@Bean
public ObjectGridClientBean wxsGridClient() {
ObjectGridClientBean oGCB = new ObjectGridClientBean();
oGCB.setObjectGridName("myGrid");
oGCB.setCatalogServiceDomain(wxsCSDomain);
return oGCB;
}
@Bean
public ObjectGridCatalogServiceDomainBean wxsCSDomain() {
ObjectGridCatalogServiceDomainBean oGCSDB = new ObjectGridCatalogServiceDomainBean();
oGCSDB.setCatalogServiceEndpoints(
catalogServer.getCatalogendpoint() + ApplicationConstants.COLON + catalogServer.getCatalogport());
return oGCSDB;
}
private List<Cache> createCaches() {
List<Cache> cacheList = new ArrayList<Cache>();
cacheObjects.forEach((cacheName, cacheMap) -> {
ObjectGridCache oGC = new ObjectGridCache();
oGC.setName(cacheName);
oGC.setMapName(cacheMap);
oGC.setObjectGridClient(wxsGridClient);
cacheList.add(oGC);
});
return cacheList;
}
@Bean
public CacheManager cacheManager() {
SimpleCacheManager simpleCacheManager = new SimpleCacheManager();
simpleCacheManager.setCaches(createCaches());
return simpleCacheManager;
}
下面是使用场景
//Usage scenario
public APIToken retrieveValidToken() throws Exception {
APIToken APIToken = null;
if (null != cacheManager.getCache("APITokenCache").get(API_TOKEN)) {
APIToken = cacheManager.getCache("APITokenCache").get(API_TOKEN, APIToken.class);
}
if (isAPITokenValid(APIToken)) {
return APIToken;
}
return null;
}
第一次调用 cacheManager.getCache("APITokenCache").get(API_TOKEN) 返回 null(1 小时后)。我究竟做错了什么?是否发生导致这种无响应的超时?是否有需要从客户端 Bean 访问并控制其超时的对象网格会话(或会话配置)?