首页 > 解决方案 > 使用本地缓存时的 Gemfire NoAvailableServerException

问题描述

我有动态配置,它们将使用服务器缓存或本地缓存来存储 gemfire dao 对象。当我打电话时:

Query query = queryService.newQuery(queryString);
        results = (SelectResults) query.execute();

为本地缓存配置时,我收到“NoAvailableServerException”。如果我为实际的 Gemfire 服务器配置,一切正常。如果我将上述内容更改为使用区域查询:

results = region.query(queryString);

该代码将在本地缓存上运行:但是,我不想更改原始代码并希望尽可能利用 QueryService。我配置了我的本地缓存:

<gfe:client-cache id="cache" />

我用一个池配置了我的服务器缓存:

<gfe:client-cache id="dev-client-cache" pool-name="dev-pool" pdx-read-serialized="false" pdx-serializer-ref="pdxAutoSerializer" />

这些语句都是按照本地缓存运行的。region.query 将工作并返回正确的数据。query.execute 将失败并出现 NoAvailableServerException。

SelectResults<AA> results
Region<Object, Object> region = getCache().getRegion(AA.class.getSimpleName());
results = region.query(queryString);
QueryService queryService = getCache().getQueryService();
Query query = queryService.newQuery(queryString);
results = (SelectResults) query.execute();

让 QueryService 在我的本地缓存上工作我缺少什么吗?

标签: exceptionspring-datagemfire

解决方案


默认情况下QueryServiceClientCache除非另有指示,否则将尝试在任何可用服务器上执行查询。您能否发布一段代码,展示您如何构建/获取实际实例?您是否尝试过使用返回QueryService的查询来执行查询?干杯。QueryServiceClientCache.getLocalQueryService()


推荐阅读