2009-07-08 5 views
0

JMS 대기열에서 메시지를받는 "서버"응용 프로그램이 있습니다. 임시 대기열을 생성 한 다음 대기열에 JMSReplyTo 헤더를 설정하여 서버에 메시지를 전송하는 클라이언트 응용 프로그램.JMS, 임시 대기열이 손상 될 때 감지

서버는 임시 대기열을 사용하여 클라이언트에 다시 응답합니다. 그러나 서버는 오랫동안 임시 대기열을 통해 전송 된 모든 클라이언트에 대한 많은 응답을 가지고 있습니다 (응답은 해당 클라이언트에만 해당되며 다른 클라이언트에게는 흥미롭지 않습니다.)

내 서버 클라이언트의 연결이 끊어 졌는지 탐지하여 해당 임시 대기열에서 메시지를 보내지 않도록 할 수 있습니까? 아니면 JMS로 할 일을하려고합니까?

답변

0

글쎄, 대기열에 게시하는 것은 클라이언트가 없어지면 더 이상 존재하지 않으므로 실패합니다. 임시 대기열은 대기열을 만든 세션이있는 동안에 만 존재한다고 가정됩니다.

그래서 응답 메시지를 보내려는 시도가 실제로이를 나타낼 것이므로 JMS를 통해 수행 할 수없는 클라이언트가 없어 졌을 때 알림을받을 필요가 없음을 알 수 없습니다.

+0

글쎄, 일부 초기 테스트 (activemq 사용)는 클라이언트가 종료 된 후 20 초 이내에 임시 대기열에 오류없이 계속 전송합니다. – nos

+0

대기열의 처리되지 않은 메시지가 계속 살아있을 수 있습니까? 협력 솔루션은 어떻습니까? 클라이언트는 서버에 메시지 끝 메시지를 알립니다. – akarnokd

+0

클라이언트가 절대로 충돌하지 않아야하고 네트워크가 항상 작동하도록 요구하는 차선책입니다 (메시지 끝 메시지는 전송되지 않을 수도 있음). – nos

0

activeMQ를 사용하면 임시 대기열을 Destination으로 전송 한 다음 대상을 질문 할 수 있습니다 (예 :

if (dest.getConsumers().size() < 1) { 
    // No more consumers on this destination, so kill it. 
} 

또는 대상에서

DestinationStatistics을 얻을, 다음보다 큰 n는 다음 tempQ를 죽일 경우, getMessages()에서 큐 깊이를 얻을.

관련 문제