2013-10-02 4 views
2

구독자가없는 ActiveMQ 브로커의 큐에 메시지를 추가 할 때 큐가 가득 차고 결국 프로듀서 스레드가 중지되어 더 이상 메시지를 게시 할 수 없습니다.구독자가 없을 때 ActiveMQ에서 메시지 만료

이 문제를 해결하기 위해 메시지에 만료를 설정하여 메모리를 확보 할 수 있다고 생각했지만 불행히도이 방법은 작동하지 않습니다. 아무도 내가 문제를 해결할 수있는 방법을 알고 있습니까?

내 브로커의 ActiveMQ 버전은 5.7이며, 브로커의 정의는 다음과 같습니다는 메모리 사용량이 보이는 브로커 미세 (0 % 사용) 및 만료 된 수에 더 이상 메시지를 게시 할 수없는 때

<bean id="mqBroker" class="org.apache.activemq.broker.BrokerService" init-method="start" destroy-method="stop"> 
    <property name="brokerName" value = "mainBroker"/> 
    <property name="persistent" value="false"/> 
    <property name="useJmx" value="false"/> 
    <property name="transportConnectorURIs"> 
     <list> 
      <value>tcp://localhost:7000</value> 
     </list> 
    </property> 
</bean> 

이 JConsole의에서 찾고 = 게시 횟수.

<jms:outbound-channel-adapter 
    channel="jsonChannel" 
    connection-factory="jmsConnectionFactory" 
    pub-sub-domain="false" 
    destination-name="MY_QUEUE" 
    time-to-live="60000" 
    wxplicit-qos-enabled="true" /> 

답변

3

브로커는 만료 된 메시지를 삭제하기 위해 대기열을 주기적으로 스윕합니다. 문제는 만료 된 메시지에 어떤 일이 일어나고 있는지입니다. DLQ에 구성 설정이있는 경우 DLQ가 종료 될 수 있으므로 만료 된 메시지를 DLQ에 추가하지 않도록 파기 정책을 구성하는 것이 좋습니다. 문제에 대해서는 ActiveMQ documentation을 참조하십시오.

0

javax.jms.Message 또는

  • 은 '살 시간'을 설정하여 당신에게

    • 사용 message.setJMSExpiration(...);나요 :

      내가 메시지를 게시 사용하고있는 코드는 스프링 통합이다 속성 (주제 게시 용으로 설계되었지만 특별한 경우에 ) 대기열에도 사용할 수 있습니다.

    ?

  • +0

    시간을 60 초로 설정했습니다. 위의 코드 편집을 참조하십시오. 또한 메시지가 성공적으로 생성되는 동안 JConsole의 큐에있는 ExpiredCount 속성이 만료 시간 (60 초) 후에 각 메시지에 대해 증가하고, – James

    관련 문제