java—侦听jms主题时删除消息

hfwmuf9z  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(456)

我使用的是SpringJMS侦听器,定义如下。它一般工作正常,但我看到它不断断开和重新连接的基础上,receivetimeout设置。

<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>

我做了一些测试,当有很多消息被发布到主题时,它会删除一些消息,因为如果消息在断开连接和重新连接之间的一小段时间内出现,侦听器显然会错过它。
如果我将receiveTimeout设置为0,这个问题就会消失。在收听主题时,是否应始终将ReceiveTimeout设置为0?或者我是不是走错了路。

fykwrbwg

fykwrbwg1#

断开和重新连接时,如果您的订阅服务器不耐用,则可能会丢失消息。但是,Springdmlc不应重新连接。你能再解决一下吗?它本质上应该订阅一个主题 session.createConsumer(..) 然后循环 consumer.receive() 或者 consumer.receive(timeout) . 不知道为什么您的dmlc重新连接时设置更高的超时。
不过,您应该没有超时,但是您可能希望跟踪重新连接调试日志等的原因。

相关问题