При повторном использовании FhirContext передовая практика возвращает исключение "Тайм-аут ожидания соединения из пула"
У меня есть jsp, который делает 25 hl7 hapi fhir вызовов асинхронно с использованием dstu2. Как рекомендуется из лучших практик, я создаю контекст 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 client = MyFHIRContext.ctx.newRestfulGenericClient("адрес сервера");
1 ответ
Исключение говорит о том, что ваш пул соединений недостаточно велик для поддержки такого количества перекрывающихся запросов.
Вы можете увеличить пул или, что еще лучше, уменьшить количество запросов, выполнив их все (или группы из них) в виде пакетных запросов - см. http://hl7.org/fhir/DSTU2/http.html для подробности.
Мы широко используем пакетные запросы в наших FHIR-клиентах для достижения хорошего эффекта.