오랫동안 JMS 세션을 살았습니다. JMS Connections / JMS 세션을 유지하는 데 항상 나쁜 관행이 열렸습니까?

StackOverflow https://stackoverflow.com/questions/274051

  •  07-07-2019
  •  | 
  •  

문제

JMS 연결 / 세션 / 소비자가 항상 나쁜 관행을 열어두고 있습니까?

코드 초안 예 :

// app startup code

ConnectionFactory cf = (ConnectionFactory)jndiContext.lookup(CF_JNDI_NAME);
Connection connection = cf.createConnection(user,pass);
Session session = connection.createSession(true,Session.TRANSACTIONAL);
MessageConsumer consumer = session.createConsumer(new Queue(queueName));
consumer.setMessageListener(new MyListener()); 
connection.start();
connection.setExceptionListener(new MyExceptionHandler()); // handle connection error


// ... Message are processed on MyListener asynchronously ...


// app shutdown code

consumer.close();
session.close();
connection.close();

JMS 사용 패턴을 개선하기위한 제안이 있습니까?

도움이 되었습니까?

해결책

오랫동안 살아있는 연결을 다룰 때 매우 일반적이고 수용 가능한 관행입니다. 많은 JMS 서버의 경우 실제로 필요할 때마다 새로운 연결을 만드는 것이 좋습니다.

다른 팁

동의했다. 여기에 있습니다 JMS를 효율적으로 사용하는 방법에 대한 좋은 팁 여기에는 연결/세션/생산자/소비자를 유지하는 것이 포함됩니다.

당신은 또한 확인하고 싶을 수도 있습니다 거래 사용에 대한 권장 사항 성능을 극대화하는 데 관심이 있다면.

연결을 유지하는 선택/세션/생산자/소비자는 오랫동안 열거 여부를 열어야합니다. 생산자/소비자가 메시지를 보내거나받는 빈도를 기반으로해야합니다.

생산자가 보내거나 소비자가 자주 메시지를 받으면 연결/세션/생산자/소비자를 열어야합니다. 반면에 메시지 보내기/수신이 드물면 이러한 JMS 개체를 열어 두는 것은 좋지 않습니다.

앱에서는 한 번에 몇 달 동안 연결/세션/소비자/생산자가 열릴 것입니다. 우리는 그 일을 안정적으로 만들기 위해 공급 업체 (BEA)와 협력해야했습니다. 그러나 그 문제는 공급 업체가 수정 해야하는 버그입니다.

참고로, 세션, 생산자 및 폐쇄 된 연결 소비자를 닫을 필요가 없습니다 ( javax.jms.connection ). 아래 코드는 리소스를 공개하기에 충분해야합니다.

try { 
        this.connection.close();
    } catch (JMSException e) {
        //
    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top