JMS キューのサンプル アプリケーションを試していました。フラグが true に設定されるまで、キューに入っているメッセージをそのままにしておきたいです。次の構成でスプリング フレームワークと MDP リスナーを使用しています。
サーバー-context.xml:
<bean id="MDPListener" class="controller.MDPListener"></bean>
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL">
<value>tcp://localhost:61616</value>
</property>
</bean>
<bean id="dataQueue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="dataQueue15"></constructor-arg>
</bean>
<bean id="container" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="messageListener" ref="MDPListener"/>
<property name="destination" ref="dataQueue"/>
<property name="sessionTransacted" value="true"/>
</bean>
私のonMessageには次のコードがあります:
public void onMessage(Message message,Session session) {
System.out.println("The session: "+session.toString());
System.out.println("New Message arrived part2 .. Passing to Controller");
Boolean g=false;
if(g==true)
{
System.out.println("Data true..session committed!!");
}
else
{
System.out.println("in the queue");
throw new RuntimeException("Saved");
}
}
例外がスローされると、メッセージはキューに戻り、コントロールは同じメッセージをもう一度リッスンしてしばらくして停止する同じリスナーに戻ります。これにより、デッド キューが発生します。そのメッセージを保存できません。リスナーにキューをリッスンさせ、前のメッセージではなく次のメッセージをリッスンさせたい。助けてください!