gpt4 book ai didi

java - JMS 队列 : how to store message in the queue until flag is set to true

转载 作者:行者123 更新时间:2023-12-01 14:43:30 24 4
gpt4 key购买 nike

我正在尝试 JMS 队列的示例应用程序。我希望队列中传入的消息保留在那里,直到我的标志设置为 true。我正在使用 spring 框架和具有以下配置的 MDP 监听器:

服务器上下文.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");
}
}

现在,当抛出异常时,消息会保留在队列中,并且控制权会返回到同一个监听器,该监听器会再次监听同一消息并在一段时间后停止。这会导致死队列。我无法存储该消息。我希望我的监听器监听队列,但不是听上一条消息,而是听下一条消息。请帮忙!

最佳答案

JMS 不能以这种方式工作 - 您必须将消息移动到代码中的另一个队列。

或者,使用 ActiveMQ,您可以配置重新传递策略,以更快地将消息发送到 DLQ(我相信默认是 6 次重试)。

关于java - JMS 队列 : how to store message in the queue until flag is set to true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15698923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com