2014-10-07 2 views
0

독립 실행 형 HornetQ 서버에서 제공하는 대기열에서 Java 동시 실행 소비자 200 명을 읽습니다. 리스너는 대기열에서 항목을 선택하고 1.5 ~ 2.5 초 동안 임의로 기다린 다음 대기열에 다시 응답합니다 (CLIENT_ACKNOWLEDGE 임).HornetQ 소비자가 연결을 닫은 후 멈추는 데 오랜 시간이 걸립니다.

이제 대기열에 20.000 개의 메시지를 만들고 200 명의 사용자를 시작하고 5 초 후에 Connection에서 닫기 (시도도 중지) 메서드를 호출합니다. 이 시간까지 소비자는 약 1000 개의 메시지를 처리했을 것입니다. 그러나 현재 작업을 끝내고 대기열에서 더 이상 수신하지 않고 마지막으로 중지하고 응용 프로그램이 종료되기 전에 또 다른 약 10.000 개의 메시지를 처리하기 위해 또 다른 3 분이 걸립니다 (connection.close()는 블로킹 호출입니다).

나는이 클라이언트 측에서 버퍼의 일종으로 인해 수 있습니다 의심 나는 그것을 제한하는 방법을 찾고 있었어요 및 공장 구성 가능한 한 제한 이러한 네 가지 속성을 설정 한 :

<producer-window-size>1</producer-window-size> 
<consumer-window-size>0</consumer-window-size> 
<consumer-max-rate>1</consumer-max-rate> 
<producer-max-rate>1</producer-max-rate> 

필자는이 모든 것을 필자의 경우에 반드시 필요로하지는 않지만 단지 모든 것을 시도하기를 원한다는 것을 이해합니다. 나는 소비자의 윈도우 크기를 0으로 설정했기 때문에 내가 가지고있는 또 다른 문제는 소비 된 메시지의 순서로 해결 되었기 때문에 이것들이 등록되었다는 것을 안다.

+0

버전이란 무엇입니까? –

+0

버전 2.2.14 –

답변

0

우리는 여기서이 커밋에 따라 통신을 상향 중단하는 우리의 코드를 변경 :

HORNETQ-1379 & https://bugzilla.redhat.com/show_bug.cgi?id=1125042 - 서버가 줄 수 커밋

OIO

을 통해 배달에 부착 될 때 클라이언트를 강제 변경된 무엇 당신 생각 :

https://github.com/hornetq/hornetq/commit/4c05475

은 기본적으로 우리가 연결이되었을 때 지금 그물코 연결 forceClose 연결을 종료하는 순간 대기중인 소비자와의 통신을 중단해야하는 항목을 차단했습니다.

이 커밋이 2.2 분기에서 수행 된 것으로 생각하지 않습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 hornetq-2.4.0.Final (standalone, non-clustered 사용)과 hornetq-core-client 및 hornetq-jms-client 용 클라이언트 응용 프로그램의 2.4.4.Final (및 netty 3.2.9) 버전을 설치했습니다. . 최종, jnp-client 4.2.2.GA). 불행하게도이 문제는 여전히 지속되며 [QueueConnection] .close()가 몇 분 동안 블록을 호출합니다. –

+0

소비자 수를 10으로 제한하면 약 10 초 후에 훨씬 빨리 끝납니다. 각 스레드는 연결 닫기가 요청 된 순간부터 3-4 개의 메시지를받습니다. 10 초 x 20은 200 명의 소비자가 끝내는 데 걸리는 3 분이므로 200 명의 소비자를위한 시간과 실제로 일치합니다. 이걸자를 기회가 있습니까? –

+0

2.4.0 우리가 필요로하는 변경 사항이 없습니다 ... 2.4.x를 git에서 빌드하고 사용해 볼 수 있습니까? 여전히 지속되면 테스트 케이스가 필요할 것입니다. –

관련 문제