2012-07-09 3 views
0

JMS에 문제가 있습니다. 문제는 응용 프로그램이 있고 JMS를 통해 메시지를 보내려고하지만 JMS 서버를 다시 시작한 후에 서버가 다운되었을 때 예외가 발생한다는 것입니다. 다시 연결하지 않습니다.런타임 동안 JMS 서버 재시작 후 JMS 메시지 보내기

JMS 서버를 다시 시작하지 않고도 완전히 문제가 없으며 weblogic 10.x를 사용하고 있습니다.

JMS 구성에 문제가 있습니까?

감사합니다.

+0

Neron이 해결 방법을 시도해보십시오 : //stackoverflow.com/questions/47683/reconnecting-jms-listener-to-jbossmq – dbf

답변

-1

메시지를 보내는 방법을 코드로 게시 할 수 있습니까?

JMS 서버가 다운되었을 때 메시지를 보내려고하면 아마도 예외가 발생하고이를 처리해야합니다. JMS 서버가 다시 시작되어 실행될 때 다음 번에 메시지를 보내려고하면 연결 팩토리에서 새 연결을 만들 것입니다. 재 연결 후 무슨 일이 생긴 것

// Let's say, you inject CF and Dest. 
@Resource(lookup = "jms/ConnectionFactory") 
private static ConnectionFactory cf; 

@Resource(lookup = "jms/MyQueue") 
private static Destination dest; 

public void sendMessage(){ // called every time you need to send a message. 
    try{ 
    Connection con = cf.createConnection(); // will reconnect, otherwise pooled. 
    Session sess = con.createSession(false,Session.AUTO_ACKNOWLEDGE); 
    MessageProducer prod = sess.createProducer(dest); 
    Message msg = sess.createTextMessage("Hello, World"); 
    prod.send(msg); 
    sess.close(); 
    con.close(); 
    }catch(Exception e){ 
    // handle errors 
    } 
} 

을하지만, 일부는 웹 로직 JMS의 기능을 다시 연결이 페이지에서 살펴/장애 조치가 내장되어 있습니다 : HTTP :

Oracle code listing and documentation about reconnecting JMS producers

+0

4 개의 jms 서버가 있고 응용 프로그램에서 라운드 로빈 전송을 사용합니다. 그리고 다른 기계에는 또 다른 4 개가 있습니다. 내 컴퓨터가 고장 나면 다른 컴퓨터가 전환됩니다. 실패한 경우, 8 개의 모든 jms 서버가 메시지를 보내도록 시도합니다. 하지만 문제는, 예를 들어, 먼저 내 컴퓨터를 종료하고 두 번째 시스템을 다시 껐다가 두 번째 컴퓨터를 열면 두 번째 컴퓨터가 열리고 두 번째 컴퓨터는 닫히지 만 열어도 예외가 발생합니다. 그래서 그것을 알 수있는 방법이 있습니까, 내 서버가 그 시간 전에 그것을 보내기 전에 괜찮습니까? – Neron

+0

메시지를 보낼 때마다 새로운 연결을 만드는 것은 나쁜 습관입니다. –

+1

글쎄 .. 정말로. 연결을 닫고 다른 메시지를 보내야 할 때 다시 열면 여기에 언급 된 문제 (서버 재시작시 다시 연결)를 처리 할 수있는 유일한 방법입니다. catch 문에 재접속 로그인을하지 않는 한 그것은 엉망입니다. 아이디어는 "재사용"부분을 JEE 응용 프로그램 서버 또는 풀링/캐싱 연결 팩토리에 위임하는 것입니다. Spring CachingConnectionFactory와 같이 몇 가지가 있습니다. 심지어 Spring JmsTemplate은 재 연결에 대처하기 위해 메시지 당 새로운 연결 + 세션을 생성합니다. –