2014-11-26 4 views
0

현재 메시지를 보내고 받기 위해 Websphere MQ에 연결하는 독립 실행 형 Java 응용 프로그램에서 작업하고 있습니다.메시지 수신기의 JMS 연결 풀링

흐름은 비동기식 모드입니다. 우리는 MessageListener 클래스를 사용하여 대기열에서 메시지를 검색 할 준비가되면이를 검색합니다. 청취자와 소비자를 초기화하는 코드는 다음과 같다 :

if(connection == null) 
     connection = getJmsConnection(); 

    try { 
     session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
     if (isTopic) { 
      destination = session.createTopic(destinationName); 
     } else { 
      destination = session.createQueue(destinationName); 
     } 
     consumer = session.createConsumer(destination); 
     consumer.setMessageListener(listener); 
    } catch (JMSException e) { 
     e.printStackTrace(); 
    } 

getJmsConnection() 방법은 풀에서 연결을 반환합니다, 아파치 코 몬즈 풀 라이브러리를 사용하여 구현.

내 질문은 프로그램에서 실행중인 동안 연결이 활성 상태이고 해당 수신기에 연결되어 있는지 여부입니다. 또는 연결이 간헐적으로 사용되며 다른 프로세스에서 재사용 할 수 있습니까? 우리의 생각은 풀에서 연결을 재사용하기 위해 보내고받는 프로세스를 갖는 것이지만, 나는 그들에게 할당 된 연결을 MessageListener이 처리하는 방법을 모르겠습니다.

감사합니다.

답변

1

여기서 핵심 개체는 연결이 아닌 세션입니다. 세션은 메시지 소비 (비동기 또는 기타)와 함께 여기에서 기본 작업을 수행 할 세션에 있습니다.

가능한 한 광범위하게 연결을 시도하고 공유하는 것이 좋습니다. 임시 대상은 연결 수준에서 범위가 지정됩니다. 따라서 풀링을 사용하는 것이 좋습니다. 그 연결을 공유하는 것이 완벽하게 가능할 것입니다.

그러나 세션 풀링을 고려해 볼 가치가 있다고 말할 수도 있습니다. 여기서 코드를 사용하면 해당 코드를 통해 매번 새로운 세션이 작성되어 WebSphere MQ 대기열 관리자에 대한 새 연결이 작성됨을 의미합니다. 그 범위가 무엇인지는 분명하지 않지만, 신속하게 폐쇄되면 병목 현상이 될 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 세션 풀링이 어떻게 행해지는지 잘 모르겠다. 이것에 관해 더 많은 것을 찾으려고 노력할 것이다. – ipohfly

+0

세션 풀링은 연결 풀링과 매우 유사한 방식으로 수행됩니다. 요점은 한 번에 오직 하나의 쓰레드 만이 세션을 사용할 수 있도록하는 것입니다. – Calanais

+0

그건 우리가 2 개의 풀을 가질 것을 의미할까요? 하나는 연결 용이고 다른 하나는 세션 용입니다. – ipohfly