我有一个jsp,它使用dstu2异步进行25个hl7 hapi fhir调用。如最佳实践中所建议,我将使用静态加载创建一次fhir上下文,并在每个服务调用中重新使用它。但是,服务调用会因以下堆栈跟踪而间歇性地失败:(我为每个服务调用初始化了fhir上下文,此问题已得到解决。但是,这使调用变慢了。有人可以通过任何其他方法帮助我或告诉我什么吗?做错了)

引起原因:org.apache.http.conn.ConnectionPoolTimeoutException:等待池中的连接超时

公共类MyFHIRContext {

public static FhirContext ctx;

static{
    ctx = FhirContext.forDstu2();
    ctx.getRestfulClientFactory().setSocketTimeout(60 * 1000);
    ctx.getRestfulClientFactory().setConnectTimeout(60 * 1000);
    ctx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.NEVER);
}


}

调用代码:
IGenericClient客户= MyFHIRContext.ctx.newRestfulGenericClient(“服务器网址”);

最佳答案

异常表明您的连接池不够大,无法支持那么多重叠的请求。

您可以通过将全部(或它们的组)作为批处理请求发出来,使池更大或更佳,以减少请求的数量-有关详细信息,请参见http://hl7.org/fhir/DSTU2/http.html#transaction

我们在FHIR客户中广泛使用批处理请求,以取得良好效果。

关于java - FhirContext重用最佳实践将返回异常“超时等待池中的连接”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40667839/

10-10 10:17