public ExchangeClientFactory(
BlockEncodingSerde blockEncodingSerde,
DataSize maxBufferedBytes,
DataSize maxResponseSize,
int concurrentRequestMultiplier,
Duration minErrorDuration,
HttpClient httpClient,
ScheduledExecutorService executor)
{
this.blockEncodingSerde = blockEncodingSerde;
this.maxBufferedBytes = requireNonNull(maxBufferedBytes, "maxBufferedBytes is null");
this.concurrentRequestMultiplier = concurrentRequestMultiplier;
this.minErrorDuration = requireNonNull(minErrorDuration, "minErrorDuration is null");
this.httpClient = requireNonNull(httpClient, "httpClient is null");
requireNonNull(maxResponseSize, "maxResponseSize is null");
long maxResponseSizeBytes = (long) (Math.min(httpClient.getMaxContentLength(), maxResponseSize.toBytes()) * 0.75);
this.maxResponseSize = new DataSize(maxResponseSizeBytes, BYTE);
this.executor = requireNonNull(executor, "executor is null");
checkArgument(maxBufferedBytes.toBytes() > 0, "maxBufferSize must be at least 1 byte: %s", maxBufferedBytes);
checkArgument(maxResponseSize.toBytes() > 0, "maxResponseSize must be at least 1 byte: %s", maxResponseSize);
checkArgument(concurrentRequestMultiplier > 0, "concurrentRequestMultiplier must be at least 1: %s", concurrentRequestMultiplier);
}