我正在开发一个整体应用程序。我们的路线图中有一些功能,我认为这些功能适合微服务架构,并且正在尝试构建它们。
我的问题:应用程序在高峰时段每秒处理约 150 个请求。这些请求来自原始 TCP/IP 连接,这些连接始终保持 Activity 状态。我们有非常严格的延迟要求(我们的大多数请求都会在 25-50 毫秒内得到响应)。每个请求需要消耗 1 到多个微服务。我担心的是,使用多个 Restful Web 服务(特别是每次使用服务以及 TLS 握手时创建/销毁连接)将导致处理这些请求时出现过多的延迟。
我的问题:当多个线程使用该 Web 服务时,是否可以(并且是否有最佳实践)维持与静态 Web 服务的连接状态?每个使用 Web 服务的请求都是独立的,但我们只需保持物理连接处于 Activity 状态即可。
最佳答案
JVM 自然地为 HttpURLConnection
池化 HTTP 连接(通过 http://docs.oracle.com/javase/8/docs/technotes/guides/net/http-keepalive.html )。因此,对于开箱即用的 JAX-WS 和 JAX-RS 应该会发生这种情况。通常,其他非基于 HttpURLConnection 的框架(如 netty)也支持 http 连接池。因此,您很可能不需要在代码中自己担心这一点。您需要计算需要池化多少个连接,但这是一种配置。
您可以通过 tcpdump
或 Wireshark
嗅探来自应用程序的流量,并检查是否没有发生 TCP FIN,从而在获得 HTTP 响应后检查 TCP 连接是否未关闭得到结果后。
关于java - 有没有办法保持与静态 Web 服务的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44167052/