Как увеличить время ожидания запроса для http4s
У меня есть запрос, который разговаривает с БД, который требует времени для ответа. И http4s выбрасывает тайм-аут запроса. Я хотел знать, есть ли свойство для увеличения времени ожидания запроса?
Спасибо Саад.
1 ответ
Тайм-ауты сервера
BlazeBuilder может быть легко отрегулирован. Реализация по умолчанию
import org.http4s._
import scala.concurrent.duration._
BlazeBuilder(
socketAddress = InetSocketAddress.createUnresolved(LoopbackAddress, 8080),
serviceExecutor = DefaultPool, // @org.http4s.util.threads - ExecutorService
idleTimeout = 30.seconds
isNio2 = false,
connectorPoolSize = math.max(4, Runtime.getRuntime.availableProcessors() + 1),
bufferSize = 64*1024,
enableWebSockets = true,
sslBits = None,
isHttp2Enabled = false,
maxRequestLineLen = 4*1024,
maxHeadersLen = 40*1024,
serviceMounts = Vector.empty
)
Мы можем использовать значение по умолчанию и изменить его, так как в классе реализован метод копирования.
import org.http4s._
import scala.concurrent.duration._
BlazeBuilder.copy(idleTimeout = 5.minutes)
Затем вы можете продолжить работу с вашим сервером, добавив свои услуги и затем обслуживая их.
Время ожидания клиента
BlazeClient принимает класс конфигурации с именем BlazeClientConfig
По умолчанию
import org.http4s._
import org.http4s.client._
BlazeClientConfig(
idleTimeout = 60.seconds,
requestTimeout = Duration.Inf,
userAgent = Some(
`User-Agent`(AgentProduct("http4s-blaze", Some(BuildInfo.version)))
),
sslContext = None,
checkEndpointIdentification = true,
maxResponseLineSize = 4*1024,
maxHeaderLength = 40*1024,
maxChunkSize = Integer.MAX_VALUE,
lenientParser = false,
bufferSize = 8*1024,
customeExecutor = None,
group = None
)
Тем не менее, у нас есть конфигурация по умолчанию, и, поскольку она существует в качестве класса case, вам, вероятно, лучше изменить значение по умолчанию. Используйте PooledHttp1Client в большинстве случаев.
import scala.concurrent.duration._
import org.http4s.client._
val longTimeoutConfig =
BlazeClientConfig
.defaultConfig
.copy(idleTimeout = 5.minutes)
val client = PooledHttp1Client(
maxTotalConnections = 10,
config = longTimeoutConfig
)