我正在尝试为我的芝麻连接实现类似断路器的后端数据库。当数据库不存在时,我想在2秒后知道这一点,而不是依赖客户机的默认超时。我可以通过我自己的FutureTasks来克服这一点,在这里我将执行存储库初始化和连接获取。但是,在日志中,我可以看到sesame客户端使用o.a.h.i.c.PoolingClientConnectionManager --这是传递的--我打赌ExecutorService和一些默认的超时。这将使我的FutureTask解决方案非常混乱。是否有一种更简单的方法来为sesame客户端设置超时。
发布于 2015-04-24 21:05:31
您可以在查询/更新对象本身上设置查询和更新超时:
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);正如您所看到的,这是相当脆弱的(很多显式转换),并且使用了ApacheApache4.4中不推荐的方法。因此,我并不推荐这是一个稳定的解决方案,但它应该在短期内提供一个解决办法。
从长远来看,Sesame团队正在致力于更方便地访问httpclient的配置。
https://stackoverflow.com/questions/29848768
复制相似问题