2014-09-26 2 views
1

javax.jms.Connection#start()은 실제로 대상입니다. javadoc에 따르면 다음과 같이 말합니다 :JMS 연결 - 시작 메소드 (IBM MQ impl)

들어오는 메시지의 연결 전달을 시작 (또는 다시 시작)합니다.

하지만 정확히 무엇을 의미합니까? 내 생각에 구현에 따라 다르므로 IBM MQ (최신 8+)의 의미는 무엇입니까? 어쩌면 클라이언트 연결이 서버 메시지를 미리 캐시 할 것입니까? examples의 제작자를 확인했으며 시작 방법을 호출 중이지만 결코 메시지를 읽지 않습니다. 나는 start()를 호출하지 않고 코드를 테스트했으며 잘 동작했다.

나는 MQ가 필요 이상으로 두포보다 더 이해할 수는 있지만 아직도 알고 싶습니다. 다른 JMS 구현에서 어떻게 수행 되었는가? Tibco, Apache MQ 같은가? 어쩌면 누군가 아는가?

답변

4

문서에 언급 된대로 Connection.start 메서드는 메시징 공급자 (이 경우 MQ)에서 응용 프로그램으로 메시지 배달을 시작합니다. 소비자는 Connection.start를 호출하지 않고는 메시지를 수신 할 수 없습니다.

메시지를 보내려면 connection.start가 필요하지 않습니다. MQ와 함께 제공되는 JmsConsumer.java 샘플을 살펴보십시오. 그것은 connection.start를 호출합니다. connection.start를 호출하지 않고 메시지를받는 샘플 코드를 게시 할 수 있습니까?

+0

시작하지 않은 코드가 메시지를 보내는 데 사용되었습니다. 메시지를 보낼 때만 전화를해야하는지 궁금합니다. (IBM 예제가 송신을 위해서조차도 start를 호출하게 함) – JIV

+0

예제의 좋은 점; 우리가 항상 그것을 추가하는 경향이 시작하는 전화를 잊어 버리는 것은 너무 쉽습니다! 아마도 추가 의견이 필요할 수 있습니다. – Calanais

1

정확히 샤시가 말했듯이. 메시지 소비자가 있고 전화가 인 경우 before connection.start()를 호출하면 메시지가 수신됩니다. 연결을 시작하면 메시지가 표시됩니다.

마찬가지로 메시지 수신기가 설정된 경우 connection.start()가 호출 될 때까지 메시지를 가져 오지 않습니다.

connection.start()가 호출 될 때까지 메시지가 대기열에 있어도 두 경우 모두 수신되지 않습니다.

내부적으로 설명 할 수없는 행동이 있습니까? 명확히 할 수 있습니까?

컨텍스트가 자동 시작되므로 새 API 호출을 사용하여 시작하려면 필요하지 않습니다.

+0

수신 전용이므로 송신 할 필요가 없습니다. – JIV