httpasyncclient hc5请求超时

i7uaboj4  于 2021-06-21  发布在  Flink
关注(0)|答案(0)|浏览(598)

我们正在检查是否使用httpclient 5.0中的httpasyncclient,它将在flink asyncfunction中创建。要求如下:
根据请求创建客户端;
ssl证书应该在运行时从文件中加载;
如果出现故障,则应重试请求特定的延迟次数
这是测试的一部分:

final TlsStrategy tlsStrategy = ClientTlsStrategyBuilder.create().setSslContext(sslContext).build();
final PoolingAsyncClientConnectionManager cm = PoolingAsyncClientConnectionManagerBuilder.create()
        .setTlsStrategy(tlsStrategy)
        .build();
try (final CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
        .setConnectionManager(cm)
        .setRetryStrategy(new RetryStrategy(3, TimeValue.ofMilliseconds(100)))
        .build()) {

    httpclient.start();
    RequestConfig requestConfig = RequestConfig.custom()
        .setConnectTimeout(Timeout.of(1000, TimeUnit.MILLISECONDS))
        .setResponseTimeout(Timeout.of(1000, TimeUnit.MILLISECONDS))
        .build();
    HttpClientContext httpContext = HttpClientContext.create();
    httpContext.setRequestConfig(requestConfig);
    final Future<SimpleHttpResponse> futurePostRequest =
          httpclient.execute(request1, httpContext, null);
class RetryStrategy extends DefaultHttpRequestRetryStrategy {
        public RetryStrategy(
                final int maxRetries,
                final TimeValue defaultRetryInterval) {
            super(maxRetries, defaultRetryInterval,
                    Arrays.asList(
//                            InterruptedIOException.class,
                            UnknownHostException.class,
//                            ConnectException.class,
                            ConnectionClosedException.class,
                            SSLException.class),
                    Arrays.asList(
                            HttpStatus.SC_TOO_MANY_REQUESTS,
                            HttpStatus.SC_SERVICE_UNAVAILABLE));
        }

        protected boolean handleAsIdempotent(final HttpRequest request) {
            return true;
        }
    }

将重写defaulthttprequestretrystrategy以允许在发生sockettimeout异常时重试。
在针对模拟http服务器测试重试策略时,响应延迟为1200毫秒,我发现当我预期所有请求都失败时,部分请求成功了(因为超时设置为1000毫秒)。e、 g.我已经同时调用上述代码10次,其中3次请求成功。这是否意味着响应超时可以超过配置?当我将setmaxtottal发送到连接管理器(cm.setmaxtottal(100))时,所有请求都按预期失败。为什么增加连接可以解决这个问题(连接管理器是为每个请求创建的,而不是为新的请求/客户机重用)?解决超时问题是否正确?
pooligasyncclientconnectionmanager的使用是否符合我们的要求?如果没有,如何以其他方式配置ssl上下文和重试策略?
谢谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题