2016-09-02 4 views
0

JMS 토픽의 메시지에 메시지 만료를 설정해야합니다. message.setJMSExpiration() 및 producer.getTimeToLive() 메소드의 속성을 설정하여 시도했습니다. 그러나 나는 내가 게시 한 주제에서 여전히 살아있는 메시지를 그렇게 생각하지 않는다.JMS 메시지 만료가 작동하지 않습니다.

만료 시간이 지나면 항목에서 수신하지 않은 메시지를 삭제하는 데 이러한 속성이 사용되는지 여부가 의심 스럽습니까? 또는 특정 가입자가 가입 한 메시지 이후

저는 특정 클라이언트를 식별하기 위해 선택기를 사용했습니다.

위의 속성 중 하나라도 메시지 만료가 충분하지 않은 경우 다른 설정을 사용하여 생산자 측에서 만료되도록해야합니까? JDK 1.6

답변

0

정보의 내 두 센트와 아파치 ActiveMQ를 5.8.0을 사용하여

입니다. 희망이 당신이 가진 문제를 식별하는 데 도움이됩니다.

두 가지 유형의 구독이 있습니다. 영구 및 비 영구 가입 및 구독자 (또는 구독을 만드는 응용 프로그램)는 각각 영구 가입자 및 비 영구 가입자라고합니다.

비 영구 가입자는 응용 프로그램이 실행되는 동안 발행물을받습니다. 영구 가입은 수신 응용 프로그램이 실행 중이 지 않아도 게시를 수신합니다. 영구 가입은 저장소 (일반적으로 대기열)를 통해 지원되며 메시징 공급자는 응용 프로그램이 실행되고 있지 않을 때 게시에 저장소를 배치합니다.

주제에 대한 가입이없는 경우 Messaging Provider는 단순히 게시물을 삭제합니다.

메시지 만료 (a.k.a TimeToLive)는 두 가지 구독 유형 모두에 적용됩니다. 만료 전에 구독자 응용 프로그램이 메시지를받지 못하면 해당 메시지가 만료되어 수신 응용 프로그램으로 배달되지 않습니다.

메시지는 제작자가 Messaging Provider에 게시 한 후에 만 ​​만료 될 수 있습니다. JMS 프로 스펙 당

+0

답장을 보내 주셔서 감사합니다. 그러나 이것은 내가 인터넷을 통해 몇 가지 기사를 읽은 이론입니다. 당신이 말한대로 영구 가입 만 적용했습니다. 내 관심사가 제 고객이기 때문에 제작자가 게시 한 메시지를 놓치지 마십시오. 내 주요 관심사는 내 클라이언트가 오랜 시간 동안 실행되지 않을 때 게시자가 클라이언트가 로그 시간 동안 실행 중이 지 않아 메시지를 만료해야한다는 것입니다. 구독자가 메시지를 구독하지 않은 경우이 많은 시간이 지나면 게시자가 메시지를 만료하도록 알려주는 방법은 무엇입니까? –

+0

당신은 두 가지를 말하고 있습니다 - (1) 클라이언트는 메시지를 놓치지 않아야하고 (2) 메시지는 얼마 후에 만료되어야합니다 - 서로 모순됩니다. 만기를 설정하고 만기 시간 내에 클라이언트가 재개되지 않으면 클라이언트는 해당 서적을 놓치게됩니다. 어쨌든 게시자 쪽에서 게시하기 전에 메시지의 만료 시간을 설정해야합니다. 만료 시간이 지나면 메시징 공급자는 메시지를 삭제합니다. – Shashi

+0

내 관심사에서, 클라이언트는 메시지가 만료 될 때까지 어떤 메시지도 놓치면 안된다. 보안상의 이유로. 만료 시간 내에 클라이언트가 구독을 시작한 경우 아무런 문제가 발생하지 않습니다. 그래서 게시자 측에서 만료 시간을 설정하여 시도합니다. –

0

1) 모든 QoS 설정 (지속성, 만료 (일명 TTL) 및 우선 순위가 프로듀서 객체에 설정해야합니다. 메시지 객체에 설정하면, 그들은 무시됩니다.

2)시겠습니까 TTL의 값을 확인하기위한 클라이언트 코드가 올바르게 설정되어 있는지 확인해야합니다.

3) TTL 값은 EPOCH로부터의 시간이 아니라 메시지가 만료되는 시간 (즉, 300000 = 5 분)입니다.