设置超时 honor timeouts

发布于 2022-09-23 23:30:13 字数 3219 浏览 206 评论 0

关于超时的显式设置

所有调用外部接口显式设置超时时间。比如:connectTimeout,readTimeout, writeTimeout。
Spring RestTemplate 的超时时间若不设置,则是自身没有超时(依赖于外部超时)。

MySQL 数据库连接,需要在连接属性上也配置好各种超时时间,避免默认设置。

  1. 交易类的http超时时间,建议不超过3秒,最长不超过 15 秒。
  2. 数据库超时时间,建议不超过3秒。例如:
    jdbc:mysql://xx.xx.xx.xx:3306/xx?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&connectTimeout=3000&socketTimeout=3000
  3. redis 连接的超时时间,不超过1秒。spring.redis.timeout=1000 # Connection timeout

话外之 honor timeouts

今天看到一个新闻:

OkHttp 4 正式版发布,从 Java 切换到 Kotlin
OkHttp 4 正式版发布了,此版本最大的变化就是项目从 Java 迁移到了 Kotlin。 就像官方介绍的,“此版本改变了一切,又没什么改变”,我们此前在 OkHttp 4 的 RC 3 版本更新中已经报导过,OkHttp 4.x 将实现语言从 Java 切换到了 Kotlin,用等效的 .kt 替换了 25K 行的 .java,这就是改变了一切的意思。 而“没什么改变”..

然后我就随手看了一下 github 的 OkHttp,然后又随手看到了 OkIO。

okio的readme

Timeouts. The streams provide access to the timeouts of the underlying I/O mechanism. Unlike the java.io socket streams, both read() and write() calls honor timeouts.

然后看到了honor timeouts,不懂啥意思,难道超时光荣不成?

honor单词的解释

fulfill (an obligation) or keep (an agreement).
accept (a bill) or pay (a check) when due.

源码

/**
 * Returns a sink that writes to `socket`. Prefer this over [sink]
 * because this method honors timeouts. When the socket
 * write times out, the socket is asynchronously closed by a watchdog thread.
 */
@Throws(IOException::class)
fun Socket.sink(): Sink {
  val timeout = SocketAsyncTimeout(this)
  val sink = OutputStreamSink(getOutputStream(), timeout)
  return timeout.sink(sink)
}

/**
 * Returns a source that reads from `socket`. Prefer this over [source]
 * because this method honors timeouts. When the socket
 * read times out, the socket is asynchronously closed by a watchdog thread.
 */
@Throws(IOException::class)
fun Socket.source(): Source {
  val timeout = SocketAsyncTimeout(this)
  val source = InputStreamSource(getInputStream(), timeout)
  return timeout.source(source)
}

谷歌搜索 honor timeouts 的一个 结果

The connection pool supports a timeout for setup, but the glue code that attaches it to asio doesn't actually honor this timeout. This means requests may hang forever behind connect. Even a series of requests repeat this workflow (because new connections aren't created in the pool because one is connecting forever).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

坏尐絯℡

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

玍銹的英雄夢

文章 0 评论 0

我不会写诗

文章 0 评论 0

十六岁半

文章 0 评论 0

浸婚纱

文章 0 评论 0

qq_kJ6XkX

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文