【发布时间】:2012-05-14 14:09:03
【问题描述】:
目前,我使用 Camel 作为编排引擎(一个 HTTP 请求进来,我的 Camel 应用程序将发送某些 HTTP 消息并根据回复做出决定)。 Camel 应用程序运行在 Apache 的 TomCat 之上。
作为测试的一部分,我开始向我的 Camel 应用程序发送越来越多的并发请求。精简后的场景如下:
HTTP POST --> Camel --> HTTP GET to server Z
<-- 200 ok (this could take up to 5 sec)
<-- 200 ok
问题:当同时发送 20 个请求时,一切正常(Camel 应用程序可以正常处理所有请求)。
但是,当发送 21 个请求时,我看到以下行为:正在处理前 20 个请求,只有当第一个请求收到最终回复(= 200 ok)时,第 21 个 HTTP GET 请求才会发送到服务器 Z ??
这意味着对于 20 个请求,所有请求都在大约 5 秒内得到处理。但是当发送21个请求时,大约需要10秒(最后一个请求只能在5秒后被服务器Z处理)!!
现在,我在 Camel 代码中添加了一些日志记录(向服务器 Z 发送 HTTP GET 消息之前和之后的时间戳),这让我很困惑:根据日志信息,Camel 确实立即发送了第 21 个请求出去 ! (它不等待第一条消息的 200 ok 最终回复?!)
所以,我想知道......第 21 个请求(到服务器 Z 的 HTTP GET)在哪里卡住了 5 秒?为什么?这真的是我的脑筋急转弯......
所以,总结一下第 21 个请求:
在骆驼日志中:
time x = POST comes in
time x+some msec = Camel sends HTTP GET to server Z
time x+10 = Camel receives 200 ok on HTTP GET
在wireshark中:
time x = POST comes in
time x+5 = Camel sends HTTP GET to server Z
time x+10 = Camel receives 200 ok on HTTP GET
注意:我在 Camel 代码中按如下方式打印时间戳:
.log("${date:now:yyyyMMdd-HH-mm-ss-SSS} **** Sending HTTP GET message... ****")
.to("{{serverZ.endpoint}}")
【问题讨论】:
-
您是否考虑过查看服务器 Z 日志?是否以某种方式在服务器中存在潜在延迟?
-
您好,Petter,感谢您的回复。无需检查服务器 Z:我已经检查了运行 Camel 代码的机器上的 wireshark 痕迹。在收到第 20 个请求的 200 OK 之前,第 21 个请求的 HTTP GET 不会发送到服务器 Z ...
-
能否请您发布您的骆驼配置?
标签: http apache-camel