2011-11-09 9 views
1

이전 응용 프로그램에서 JBoss Messaging에서 HornetQ로 JMS 시스템을 업그레이드하는 중입니다.이 응용 프로그램의 사용 방법과 관련된 것으로 보이는 몇 가지 문제점이 있습니다. JMS 연결을 관리합니다. 이것은 JMS에 처음으로 대규모로 노출 된 것입니다 (간단한 장난감 사용 이외). 그래서 현재의 관용어가 ... 정확하고, 어리석은, 또는 죽은 잘못된 것인지 궁금합니다.HornetQ를 사용하는 JMS 연결/ConnectionFactory 참조

다음은 현재 시스템의 작동 방식입니다.

static QueueConnection connection; 
static boolean isConnected; 

static void sendSomeMessage(Object sendMe) { 
    if(!isConnected) connect(); 

} 

static void connect() { 
    // jndi lookup for connection factory 
    connection = factory.createQueueConnection(); 

    // lambdas in java pseudo code, woot! 
    connection.onException => disconnect(); 
    connection.start(); 
    isConnected = true; 
} 

static void disconnect() { 
    connection.close() 
    isConnected = false; 
} 

이것의 요점은 접속 에러가 마지막 종료하고 다시 가져올 연결을 발생할 때 에러가 발생할 때까지 전송되는 매 메시지의 반복 사용한다는 것이다.

필자가 보았던 모든 예제는 모든 메시지에 대해 항상 새로운 연결 팩토리와 새 연결을 생성하지만,이 예제는 큰 시스템 예제가 아니며 "사용법"예제가 아닙니다.

연결 팩토리를 캐시해야 JMS 관 리에 대한 단일 관리 참조가 허용되는 관례로 유지됩니까? 새로운 메시지가있을 때마다 둘 다 재현되어야합니까?

연결 팩토리를 다시 사용하지만 매번 새로운 연결을 사용하는 것이 좋습니다.

답변

1

메시지 시스템은 그래서, 당신은 응용 프로그램의 전체 수명에 대한 연결을 열린 상태로 유지해야 ... 비동기로

을 생각하고 있습니다.

JMS는 현재 생성해야하는 객체에 대해 약간 자세한 정보를 표시하므로 연결 및 세션을 만들어야합니다.

그래서 당신은이 작업을 수행해야합니다

연결 = cf.createConnection (...)를;

session = connection.createSession (...);

생산자 = session.createProducer (...);

세션 및 제작자는 항상 스레드 내에서 사용해야합니다. 세션은 스레드 사용을 나타냅니다. (동기화되는 한 여러 스레드 내에서 다시 사용할 수 있습니다.)

+0

덕분에 매우 도움이되었습니다! – Michael