在收听jms主题时删除消息

时间:2012-08-24 18:01:26

标签: java spring jms spring-jms

我正在使用如下定义的spring jms监听器。它通常工作正常,但我看到它根据recieveTimeout设置不断断开连接并重新连接。

<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?或者我是以错误的方式处理整个过程。

1 个答案:

答案 0 :(得分:0)

断开连接并重新连接时,如果您的用户不耐用,您可能会丢失消息。但弹簧DMLC不应重新连接。你可以解决这个问题吗?它本质上应该订阅主题session.createConsumer(..)然后循环consumer.receive()consumer.receive(timeout)。将超时设置更高时,不确定为什么DMLC会重新连接。

但是没有超时你应该没问题,但你可能想跟踪调试日志等重新连接的原因。