【问题标题】:Connection Pool - OkHttp连接池 - OkHttp
【发布时间】:2020-11-12 18:47:06
【问题描述】:

我们在 WAS 环境中使用 OkHttp,请您帮助我们解决以下问题 -:

问题 1-: 理想的连接池大小应该是多少,并在容器环境中保持活动状态,是否有计算公式,我们将使用 Okhttp 客户端连接到两个不同的 URL

问题 2-: - 我们不希望出现任何客户端故障,OkHttp 如何处理陈旧连接,我在 OkHttp 中没有看到任何参数来检查陈旧连接?

http java client java有这个参数可以开启stale connection check

http.connection.stalecheck

我们正在使用下面提到的 OkHttp 客户端,我是否缺少任何重要配置?

new OkHttpClient.Builder()
              .readTimeout(10,TimeUnit.SECONDS)
              .retryOnConnectionFailure(false)
              .connectTimeOut(5,TimeUnit.SECONDS)
              .connectionPool(new ConnectionPool(10,5,TimeUnit.SECONDS)
              .build();

【问题讨论】:

  • 这里定义的ConnectionPool是只配置maxIdleConnections。在您的情况下,您配置了 10 个 maxIdleconnections 和 5secs keepalive,这非常少。没有公式可以告诉您需要根据用例进行试验的正确数量如果您想为连接池配置 maxConnections,请使用 OkHttpClient.Builder.dispatcher(new Executors.newFixedThreadPool())
  • 我们正在使用执行(同步),因为如果我们使用异步,OkHttp 文档调度程序将工作

标签: java okhttp


【解决方案1】:

对于容器环境来说,理想的连接池大小和保持活动状态应该是多少

以 256 为起点。它足够大,您将获得良好的命中率,并且足够小,您不会注意到所使用的内存。

如果您经常访问许多不同的主机,您可以对其进行调整。如果您在非常小的容器上运行或对内存敏感,则可以将其调低。

我们不希望出现任何客户端故障

在 OkHttpClient.Builder 上有一个设置,retryOnConnectionFailure。默认情况下是这样,它将为您处理客户端故障。如果您确实想处理客户端故障,您可以将其设置为 false。

【讨论】:

  • 谢谢你能不能帮我们保持活力也和reg retryOnConnectionFailure 它将重试多少次?我正在使用 4.7.2 版本的 Okhttp
  • 每次断开连接都会重试一次;通常最多一次,但在人为的情况下,它可能是多次。 OkHttp 也有 20 次尝试的硬性限制,主要适用于身份验证挑战和重定向。
  • 我们可以继续使用默认 5 分钟的 Keep Alive 吗?
  • 是的。 5 秒到 10 分钟之间的任何时间都可以。
猜你喜欢
  • 1970-01-01
  • 2016-06-30
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 2015-05-02
  • 1970-01-01
相关资源
最近更新 更多