我们使用 Apache Camel 作为编排引擎。通常,以下场景:
客户端发送 HTTP 请求 <-> CAMEL 代码 <-> 外部服务器
当我们的客户端向我们的 CAMEL 代码发送 HTTP 请求时,球开始滚动。Camel 代码将通过 REST HTTP 调用触发外部服务器。最终,Camel 代码会将回复发送回客户端。
在将响应发送回客户端之前的最后一个操作,Camel 代码向外部服务器发送 HTTP GET。因此,首先建立 TCP 连接,然后发送数据。一段时间后(这可能需要 5 到 10 秒),外部服务器回复 200 OK。
问题:Camel在收到200 OK后没有向外部服务器发送TCP FIN。结果,TCP 连接保持打开状态……(外部服务器在 200 秒超时后自行关闭 TCP 连接,但这意味着 TCP 资源在 200 秒内丢失)。
因此,在 TCP 级别,它是这样的:
Camel <----------> 外部服务器
TCP SYN -->
<-- TCP SYN,ACK
TCP ACK -->
HTTP GET -->
<-- 200 OK
TCP ACK -->
<200 seconds later>
<-- TCP FIN,ACK
TCP ACK -->
知道如何让 Camel 在收到 200 OK 后关闭 TCP 连接吗?
注意:我尝试添加“连接:关闭”标题,但骆驼没有添加标题?!它似乎忽略了它......
这是添加标题的代码:
exchange.getOut().setHeader("Connection","Close");
我在带有 Eclipse IDE 的 Spring 框架中使用 Camel 2.9.1。