在接收器超时之前,JMS消息不会发送

时间:2013-04-16 18:48:20

标签: jms message-queue

在我的应用程序中,我使用MDB来侦听来自队列的消息,然后将请求消息发布到另一个队列。将消息发布到另一个队列发生在MDB中。然后我等待使用接收方法的响应,超时为20秒。现在发生的是我发送到队列的请求消息没有被传递20秒。 消息在20秒后传递,但到那时接收方法返回,我们无法处理我们收到的请求响应。

我没有使用事务会话将消息发布到队列中。 请告诉我为什么在超时期限之前没有收到消息。

1 个答案:

答案 0 :(得分:0)

使用MDB表明您正在某种Java EE服务器中运行。您确定没有为MDB和JMS会话启用分布式(JTA)事务吗?这将解释在您的方法返回之前请求消息未被传递。即使将会话事务指定为false,也可以启用JTA事务。

这个blog post涵盖了这个案例非常好,即使它有点旧。

简短的回答是在开始等待回复之前使用UserTransaction并提交请求事务。