2012-08-24 28 views
2

我使用的是以下定義的spring jms偵聽器。它通常工作正常,但我看到它不斷斷開連接,並基於recieveTimeout設置重新連接。在收聽jms主題時丟棄消息

<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 
    <!-- mrgm connection to the jca adapter --> 
    <property name="connectionFactory" ref="mrgmConnectionFactory" /> 
    <!-- name of the topic --> 
    <property name="destinationName" value="test.destinationname" /> 
    <!-- class which will listen for messages (must implement javax.jms.MessageListener --> 
    <property name="messageListener" ref="TestListener" /> 
    <property name="sessionTransacted" value="true" /> 
    <property name="receiveTimeout" value="1000" /> 
      <!--turning this on drops all messages --> 
      <!--  <property name="pubSubDomain" value="true" /> --> 

</bean> 

我已經做了一些測試,當有很多信息被髮布到主題,因爲如果在斷開連接之間的小週期的消息傳出會掉落一些並重新將明顯受到聽衆錯過。

如果我將recieveTimeout設置爲0,則此問題消失。我應該在收聽某個主題時將recieveTimeout設置爲0嗎?還是我以錯誤的方式討論整個過程?

回答

0

當斷開連接並重新連接時,如果您的用戶不耐用,您可能會丟失信息。但是,春季DMLC不應該重新連接。你能解決這個問題嗎?它應該基本上訂閱主題session.createConsumer(..)然後循環consumer.receive()consumer.receive(timeout)。不確定爲什麼你的DMLC在超時設置更高時重新連接。

你應該沒有超時罰款,但是,你可能想跟蹤調試日誌記錄等重新連接的原因。

+0

感謝您的提示。它確實顯示你是正確的。我正在使用縮短的語法。但是我注意到服務確實每隔1秒重新連接一次。再次感謝您的幫助。 \t' \t \t \t