簡體   English   中英

ActiveMQ Spring監聽器突然停止工作

[英]ActiveMQ Spring listener suddently stops working

我必須修復從另一家公司繼承來的應用程序,並且我有一個不清楚的錯誤:jms偵聽器突然停止工作而沒有任何明顯的原因。

這是一個基於spring的客戶端,這里是上下文:

    <bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory" >
    <property name="useAsyncSend" value="false" />
    <property name="useCompression" value="true" />
    <property name="optimizeAcknowledge" value="true" />
    <property name="messagePrioritySupported" value="true" />
    <property name="brokerURL" value="failover:(tcp://${brokerHost}:61616)?timeout=3000&jms.redeliveryPolicy.maximumRedeliveries=-1&jms.redeliveryPolicy.maximumRedeliveryDelay=1000000&jms.redeliveryPolicy.useExponentialBackOff=true" />
    <property name="maxThreadPoolSize" value="60" />
    <property name="closeTimeout" value="2000" />
    <property name="nonBlockingRedelivery" value="true" />
    <property name="exclusiveConsumer" value="false" />
</bean>

<bean id="jmsConnectionFactory"  class="org.apache.activemq.pool.PooledConnectionFactory" >
    <property name="connectionFactory" ref="amqConnectionFactory" /> 
    <property name="maxConnections" value="50" />
    <property name="maximumActiveSessionPerConnection" value="100" />
    <property name="idleTimeout" value="20000" />
    <property name="expiryTimeout" value="15000" />
</bean>

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate" abstract="true">
    <property name="connectionFactory" ref="jmsConnectionFactory"/>
    <property name="explicitQosEnabled" value="true"/>
    <property name="sessionTransacted" value="true" />
    <property name="sessionAcknowledgeModeName" value="CLIENT_ACKNOWLEDGE" />
    <property name="receiveTimeout" value="4000" />
</bean>

<bean id="actionsJmsTemplate" parent="jmsTemplate">
    <property name="defaultDestination" ref="actionPendingDestination"/>
</bean>

<bean id="jmsActionsListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="jmsConnectionFactory"/>
    <property name="destination" ref="actionPendingDestination"/>
    <property name="messageSelector" value="" />
    <property name="messageListener" ref="actionsListener" />
    <property name="sessionTransacted" value="true"/>
    <property name="cacheLevelName" value="CACHE_SESSION" />
    <property name="maxConcurrentConsumers" value="50" />
    <!-- <property name="transactionManager" ref="transactionManager" /> -->
    <property name="transactionTimeout" value="1000" />
</bean>

<!--  ActiveMQ Destinations -->
<bean id="actionPendingDestination" class="org.apache.activemq.command.ActiveMQQueue">
    <constructor-arg index="0" value="actions.pending.queue.>"/>

處理應用程序內部消息的bean“ actionsListener”實現javax.jms.MessageListener和org.springframework.beans.factory.BeanNameAware。 它並沒有做任何事情來確認會話或管理事務。 該類中沒有類似的代碼。

這些庫的版本是:

  • 春季:3.2.5。發布
  • ActiveMQ客戶端:5.9
  • JDK:1.6

您認為此配置有任何問題嗎?

謝謝!

卡洛斯

我看到它正在使用CLIENT_ACKNOWLEDGE; 您是否已確認該確認發生在所有代碼路徑(包括異常)上? 已經有一段時間了,但是我認為如果不確認消息會發生什么,那就是只能處理您的預取緩沖區值,因此一旦失敗了那么多次數,就完成了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM