2013-08-29 3 views
6

일부 모듈로 구성된 응용 프로그램에서 작업 중입니다. 이 모듈 중 하나에서 누군가 주제에 메시지를 게시하는 주제 제작자를 만들었지 만이 모듈은 메시지를 대기열에서 제외 할 주제 소비자가 없습니다. 주제 제작자는 setTimeToLive()을 사용하여 time-to-live 속성을 300000 밀리 초로 설정합니다.JMS 주제 라이브 시간

나는 어떤 소비자가없는 경우, 메시지가 300000 밀리 초 이내에 만료하고 할당이 해제되는 것을 기대합니다.

응용 프로그램은 톰캣 6.0.36에 배포하며 대기열 및 주제를 처리하기 위해 외부의 ActiveMQ 서버를 사용합니다.

주제 설정 아래의 MBeans 탭에서 Java VisualVM으로 ActiveMQ 모니터링 "Enqueue Count"변수가 증가했지만 time-to-live 설정이이 메시지에 영향을 주는지 이해하지 못합니다. 나는 카운터 "ExpiredCount는"증가 할 전망이지만 여전히

해당 메시지가 여전히 메모리에하거나 해제하는 경우 남아있는 경우 이해하는 방법이 있나요 0으로 고정 된 상태로 유지?

대단히 감사합니다!

편집 :

나는 API는 jvisualvm으로 모니터링 서버와 내부 글래스 피쉬 3.1을 사용하여 넷빈즈 7.3에 J2EE 튜토리얼 예제를 사용하여 일부 테스트 및 모든 작품을 말한다 않았다 같이

은 JMS API 주제 탐색에 대한 메커니즘을 제공하지 않습니다. 메시지는 일반적으로 즉시 표시로 주제에서 사라 :을 소비 할 메시지 사용자가없는 경우에는 JMS 공급자를 제거합니다. 영구 가입을 사용하면 메시지 소비자가 활성화되지 않은 상태에서도 메시지가 주제에 남아있을 수 있지만 메시지를 조사 할 수있는 기능은 없습니다.

글래스 피쉬는 activeMQ 내부에서 사용하기 때문에이 기능이 독립형 ActiveMQ 서버에도 유효하다는 사실을 알고 있습니다.

END 편집.

+0

주제가 지속 가능합니까? – Beryllium

+0

/설정은 어떻게 볼 수 있습니까? –

+0

'topicSession.createSubscriber (...)'또는'topicSession.createDurableSubscriber (...)'를 사용하고 있습니까? – Beryllium

답변

4

Creating Robust JMS Applications에서 인용 : 메시지 메시지 지정된 의 TimeToLive 출판 인 경우
가 [...]
현재에 첨가 만료 허용

5.1.4 만료 시간은입니다. 지정된 만료 시간 전에 전달되지 않은 모든 메시지는 소멸됩니다.

javax.jms.Message#getJMSExpiration()의 소스에서 또 다른 인용 :

메시지의 만료 시간에 도달

하는 제공을 폐기해야합니다. [...]
클라이언트은 만료 된 메시지를 수신해서는 안됩니다. 그러나 JMS API는 이 발생하지 않도록 을 보장하지 않습니다.

그래서 비 영구 가입자의 경우 :

  1. 서버는 연결된 각 가입자에게 메시지를 보냅니다. 메시지의 만료 값은 "현재 시간 + TTL"로 설정됩니다. 연결이 끊긴 구독자는 아무 것도받지 않습니다.
  2. 아직 만료되지 않은 경우 연결된 클라이언트가 정상적으로 메시지를 수신합니다.
  3. 연결된 클라이언트가 메시지를 받기 전에 너무 오래 걸리면 (메시지가 만료 된 경우) 서버에서이를 버릴 수 있습니다 (서버가 클라이언트의 버퍼에 아직 밀어 넣지 않은 경우) 메시지가 이미 클라이언트의 버퍼에있는 경우).

따라서 소비자가없는 경우 메시지가 전혀 저장되지 않은 것입니다. 큐 삽입 수이 증가하고 만료 된 수은 0으로 유지됩니다. 만료 된 수은 연결된 (그러나 유휴 상태 인) 가입자의 경우에만 증가해야합니다.

How do I find the Size of a Queue에서 인용

인큐 수 - 마지막으로 다시 시작한
만료 카운트 이후 큐에 보낸 메시지의 총 수 - 그들은이 만료 되었기 때문에 전달되지 않은 메시지 수를

참고 : JBoss 7을 사용한 테스트는이 경우 메시지가 클라이언트에서 나타나지 않는다는 것을 보여줍니다.

+0

정말로 메시지가 전혀 저장되지 않았는지 확인할 수있는 방법을 알고 있습니까? –

+1

주제없이 (소비자없이) 계속 많은 메시지를 보내는 테스트 프로그램을 설정할 수 있습니다. 카운터와 힙 크기를보십시오. 여전히 올바른 것은 아닙니다. 그렇지 않으면 코드를 살펴 봐야합니다. – Beryllium

+0

만료 된 메시지가 나타납니다. 어떤 시체가 도움이 될 수 있습니까? – anon

관련 문제