현재 Camel을 오케스트레이션 엔진으로 사용하고 있습니다 (HTTP 요청이 들어오고 Camel 응용 프로그램은 특정 HTTP 메시지를 보내고 응답을 기반으로 의사 결정을 내립니다). Camel 애플리케이션은 Apache의 TomCat에서 실행됩니다.Apache Camel : 누가 HTTP 메시지를 보냈습니까?
테스트의 일환으로 점점 더 많은 동시 요청을 내 Camel 애플리케이션에 보내기 시작합니다. 다음과 같이 아래로 벗겨진 cenario은 다음과 같습니다
HTTP POST --> Camel --> HTTP GET to server Z
<-- 200 ok (this could take up to 5 sec)
<-- 200 ok
문제 : 20 개 동시 요청을 보낼 때, 모든 (모든 요청은 낙타 응용 프로그램에서 잘 처리됩니다) 잘 간다.
그러나 21 개의 요청을 보낼 때 첫 번째 20 개의 요청이 처리되고 첫 번째 요청이 최종 응답 (= 200 ok)을받은 경우에만 21 번째 HTTP GET 요청이 서버로 전송됩니다 Z ??
이것은 20 개의 요청에 대해 모두 5 초 이내에 처리된다는 것을 의미합니다. 그러나 21 개의 요청을 보낼 때 10 초가 걸립니다 (마지막 요청은 5 초 후에 서버 Z에서만 처리 할 수 있습니다)!
이제 Camel 코드 (서버 Z에 HTTP GET 메시지를 보내기 전후의 타임 스탬프)에 일부 로깅을 추가했습니다. 로그 정보에 따르면 Camel은 21 번째 요청을 보냅니다 즉시! (그것은 첫 번째 메시지의 200 ok 최종 응답을 기다리지 않습니까?)
그래서, 궁금한데 ...이 21 번째 요청 (서버 G에 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
와이어 샤크에서 :
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
참고 : I 내 낙타 코드에 다음과 같이 타임 스탬프를 인쇄합니다.
.log("${date:now:yyyyMMdd-HH-mm-ss-SSS} **** Sending HTTP GET message... ****")
.to("{{serverZ.endpoint}}")
서버 Z 로그를 살펴 보았습니까? 어떻게 든 서버의 잠재적 지연일까요? –
하이 페터, 답장을 보내 주셔서 감사합니다. 서버를 확인할 필요가 없음 Z : Camel 코드가 실행중인 컴퓨터에서 wireshark 추적을 확인했습니다. 21 번째 요청에 대한 HTTP GET은 20 번째 요청에 대한 200 OK가 수신 될 때까지 서버 Z로 전송되지 않습니다 ... – opstalj
Camel 구성을 게시 하시겠습니까? – altanis