我们在部署在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连接?
2条答案
按热度按时间afdcj2ne1#
像这样的东西应该管用
flseospp2#
下面是我在Java 17中使用的代码