독립 실행 형 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으로 설정했기 때문에 내가 가지고있는 또 다른 문제는 소비 된 메시지의 순서로 해결 되었기 때문에 이것들이 등록되었다는 것을 안다.
버전이란 무엇입니까? –
버전 2.2.14 –