【发布时间】:2021-02-18 04:15:09
【问题描述】:
我们在部署在 k8s 集群上的 Java 应用程序中使用 okhttp。我们的源应用程序没有启用 istio 并使用 envoy sidecar 连接到目的地。连接链如下所示:
SRC --------> 特使 -> DST
所以实际上 SRC 应用不是直接与 DST 应用建立连接,而是与它前面的 Envoy 代理建立连接。当 DST 应用程序关闭时,它会终止 DST 和 Envoy 之间的所有连接,但 SRC 和 Envoy 之间的连接保持打开状态。这就是 SRC 应用程序开始收到 503 错误的原因。从 SRC 到 DST 的另一条消息也得到 503,因为我们不断重用在 okhttp 的连接池中建立的空闲连接。 解决此问题的方法是重新建立新的 TCP 连接,而不是使用连接池中的空闲连接之一。 是否可以配置 okhttp 根据接收到的单个 HTTP 503 终止整个 TCP 连接?
【问题讨论】: