我正在尝试为我的 Sesame 与后端数据库的连接实现断路器之类的东西。当数据库不存在时,我想在 2 秒后知道这一点,而不是依赖客户端的默认设置来超时。我可以用我自己的 FutureTasks 来克服这个问题,我将在其中执行存储库初始化和连接获取。但是在日志中,我可以看到 sesame 客户端使用oahicPoolingClientConnectionManager - 我打赌ExecutorService和一些默认超时已通过。这将使我的FutureTask解决方案变得非常混乱。有没有更简单的方法来为芝麻客户端设置超时。
问问题
305 次
1 回答
1
您可以设置查询和更新超时,特别是在查询/更新对象本身:
RepositoryConnection conn = ....;
...
TupleQuery query = conn.prepareTupleQuery(QueryLangage.SPARQL, "SELECT ...");
query.setMaxExecutionTime(2);
但是,如果您想为通过 HTTP 的所有 api 调用设置一般超时,目前唯一的方法是获取对 HttpClient 对象的引用,然后重新配置它:
HTTPRepository repo = ....;
AbstractHttpClient httpClient = (AbstractHttpClient)((SesameClientImpl)repo.getSesameClient()).getHtttpClient();
HttpParams params = httpClient.getParams();
params.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 2000);
httpClient.setParams(params);
如您所见,这是相当脆弱的(大量显式转换),并且使用了 Apache HttpClient 4.4 中已弃用的方法。所以我不完全推荐这是一个稳定的解决方案,但它应该在短期内提供一种解决方法。
从长远来看,Sesame 开发团队正致力于更方便地访问 httpclient 的配置。
于 2015-04-24T21:05:31.633 回答