以下に定義するように、Springjmsリスナーを使用しています。通常は正常に動作しますが、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に設定する必要がありますか?または私はこのプロセス全体を間違った方法で行っていますか?