При повторном использовании 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-клиентах для достижения хорошего эффекта.

Другие вопросы по тегам