我正在尝试JMS队列的示例应用程序..我希望队列中的消息保持不变,直到我的标志设置为true。我使用spring框架和MDP Listener进行以下配置:
服务器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");
}
}
现在,当抛出异常时,消息将保留在队列中,并且控件将返回到同一侦听器,该侦听器将再次侦听相同的消息并在某段时间后停止。这导致死队列。我无法存储该消息。我希望我的监听器能够收听队列,但不希望收听上一条消息,而不是下一条消息。请帮忙!
答案 0 :(得分:1)
JMS不能以这种方式工作 - 您必须将消息移动到代码中的另一个队列。
或者,使用ActiveMQ,您可以配置重新传递策略以更快地将消息发送到DLQ(我相信默认值是6次重试)。