2014-10-08 3 views
0

Q에서 소비해야하며 각 메시지에 순서 키를 찍어서 순서를 표시해야합니다. 즉, 소비는 순차적 일 필요가있다. 성능/처리량 관점에서, onMessage() 메소드에서 블로킹 receive() 메소드 또는 비동기 리스너를 단일 스레드 구성으로 사용하는 것이 더 좋을까요?JMS 큐 소비자 : 동기 receive() 또는 단일 스레드 onMessage()

감사합니다.

답변

1

성능 및 처리량에 영향을주는 많은 측면이 있습니다. 순수한 JMS 용어로 메시지를 가져 오는 동기화 또는 비동기 모델이 덜 효과적 일 수 있다는 사실을 명시하는 것은 실제로 불가능합니다. 응용 프로그램 작성 f}, 사용중인 다른 자원, 선택한 메시징 프로 Y 이더의 구현 W 기계 성능 W 클라이언트 W 서 v 시스템의 구성과 같은 기타 요인에 따라 달라집니다.

이 토론, Single vs Multi-threaded JMS Producer이 주제 중 일부를 다루었습니다.

시퀀스에 단일 세션 인 경우 JMS 사양은 메시지 순서화에 대해 몇 가지 보증을 제공합니다. 사양을 검토하여 전반적인 요구 사항과 일치하는지 확인하는 것이 가장 좋습니다.

종종 사람들은 메시지 생성 시간에 응용 프로그램 일련 번호를 삽입합니다. 따라서 소비자는 올바른 메시지를 순서대로 확인하고 있는지 확인할 수 있습니다. 소비 시간에 시퀀스 번호를 추가한다고해서 해당 소비자에게 도움이되지는 않습니다.

메시징에 대한 요구 사항이 엄격해질수록 전체 아키텍처가 엄격해질수록 엄격 해지며 수평 확장 성을 구현하는 것이 어렵다는 것을 명심하십시오.

+0

답장을 보내 주셔서 감사합니다. 나는 또한 "어려운 말"이 답이라고 생각했다. 메시지 순서에 관해서는 Q 제작자가 시퀀스 키를 넣는 경우 소비자 측에서 순차적으로 수행 할 필요는 없지만 그렇게하지는 않습니다. 오라클 매핑과 마찬가지로 메시징과 주문 간의 임피던스 불일치라고 말하면서 앞으로 나아갈 것입니다. – wqt

+0

On 옵션은 소비자가 메시지의 타임 스탬프를 볼 수 있도록 할 수 있습니다. 그러나이 기능은 비활성화 될 수 있으며 정확한 시간을 얼마나 신뢰하는지에 달려 있습니다. 그러나 그것은 소비자와 순서가 맞지 않는 무언가의 표시를 줄 수 있습니다. – Calanais