2013-10-02 2 views
2

При добавлении сообщений в очередь в брокере ActiveMQ, где нет подписчика, очередь заполняется и, в конце концов, зависает нить производителя, не может публиковать больше сообщений.Истекает сообщения в ActiveMQ, когда нет подписчиков

В попытке решить проблему я установил истечение срока действия сообщений, считая, что это освободит память, но, к сожалению, это не сработает. Кто-нибудь знает, как я могу решить проблему?

Мой брокер ActiveMQ версия 5.7 и определение брокер:

<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, когда он не в состоянии публиковать больше сообщений брокеру использование памяти выглядит нормально (использование 0%) и выдыхаемого кол = опубликованный счет.

кода я использую для публикации сообщений с пружинной интеграцией:

<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. См. ActiveMQ documentation по проблеме.

0

ли Вы,

  • использования message.setJMSExpiration(...); для вашего javax.jms.Message или
  • установить «время жить» свойство (которое предназначено для темы-публикации, но может в особых случаях также может использоваться для очередей)

?

+0

Я установил время, чтобы жить до 60-х - см. Приведенный выше код. Также, возможно, стоит отметить, что в то время как сообщения получают успешный атрибут ExpiredCount в очереди по шагам JConsole для каждого сообщения после истечения срока действия (60 секунд) – James

Смежные вопросы