문제

JBossMQ의 대기열에서 텍스트 메시지를 읽는 Java 수신기가 있습니다.JBoss를 재부팅해야 하는 경우 리스너는 다시 연결되지 않고 메시지 읽기를 다시 시작합니다.우리는 2분마다 리스너의 로그 파일에 연결할 수 없다는 메시지를 받습니다.코드나 JBossMQ에 설정하지 않은 것이 있습니까?저는 JMS를 처음 사용하므로 도움을 주시면 대단히 감사하겠습니다.감사해요.

도움이 되었습니까?

해결책

클라이언트 코드 javax.jms.ExceptionListener에서 구현해야 합니다.onException이라는 메소드가 필요합니다.클라이언트 연결이 끊어지면 JMSException이 발생하며 이 메서드가 자동으로 호출됩니다.주의해야 할 유일한 것은 JBossMQ에서 의도적으로 연결을 끊는 경우입니다. 이 경우에도 예외가 발생합니다.

일부 코드는 다음과 같습니다.

    public void onException (JMSException jsme)
    {
        if (!closeRequested)
        {
            this.disconnect();
            this.establishConnection(connectionProps, queueName, uname, pword, clientID, messageSelector);
        }        
        else
        {
            //Client requested close so do not try to reconnect
        }
    }

그런 다음 "설립Connection" 코드에서 다음을 구현합니다. while(!initialized) 내부에 try/catch가 포함된 구성입니다.제대로 연결하고 구독했는지 확인할 때까지 모든 JMS/이름 지정/등을 포착하는 while 루프 내부에 머무르십시오.예외.

우리는 JBossMQ에서 이 방법을 수년간 사용해 왔으며 훌륭하게 작동합니다.JBossMQ를 반송하거나 네트워크 연결이 끊어진 후 JMS 클라이언트가 다시 연결되지 않는 문제가 발생한 적이 없습니다.

다른 팁

나는 당신이 MessageListenerContainer와 같은 JMS용 스프링 추상화 재연결, 거래 및 풀링을 처리합니다.MessageListener를 제공하고 ConnectionFactory로 MessageListenerContainer를 구성하기만 하면 컨테이너가 나머지 작업을 수행합니다.

당신이 순전히 청취자이고 행동한다면 아니요 연결 설정 이외의 다른 JMS 호출인 경우 "onException() 핸들러" 응답이 정확합니다.

코드에서 JMS 호출을 수행하는 경우 onException() 콜백을 사용하는 것만으로는 충분하지 않습니다.문제가 JMS 공급자에서 앱으로 전달됩니다. 어느 하나 JMS 메소드 호출에 대한 예외를 통해 또는 onException() 콜백을 통해.둘 다 아닙니다.

따라서 코드에서 JMS 메서드를 호출하는 경우 해당 호출에서 예외가 발생하면 해당 재연결 논리도 호출해야 합니다.

개인적인 경험에서 나온 조언입니다. 업그레이드 JBoss 메시징. 4개월간 생산과정에서 문제 없이 지켜봤습니다.다른 많은 기능 중에서도 완전히 투명한 장애 조치 기능이 있습니다.

또한 Spring을 사용한다면 매우 주의 깊은 와 더불어 Jms템플릿.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top