1

我正在尝试为我的 Sesame 与后端数据库的连接实现断路器之类的东西。当数据库不存在时,我想在 2 秒后知道这一点,而不是依赖客户端的默认设置来超时。我可以用我自己的 FutureTasks 来克服这个问题,我将在其中执行存储库初始化和连接获取。但是在日志中,我可以看到 sesame 客户端使用oahicPoolingClientConnectionManager - 我打赌ExecutorService和一些默认超时已通过。这将使我的FutureTask解决方案变得非常混乱。有没有更简单的方法来为芝麻客户端设置超时。

4

1 回答 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 回答