在我的应用程序中,我使用 MDB 侦听来自队列的消息,然后将请求消息发布到另一个队列。这种将消息发布到另一个队列的过程发生在 MDB 中。然后我使用接收方法等待响应,超时时间为 20 秒。现在发生的情况是,我发布到队列的请求消息在 20 秒内没有被传递。消息在 20 秒后送达,但此时接收方法返回,我们无法处理收到的请求响应。
我没有使用事务处理会话将消息发布到队列。请告诉我为什么在超时期限之前没有发送消息。
在我的应用程序中,我使用 MDB 侦听来自队列的消息,然后将请求消息发布到另一个队列。这种将消息发布到另一个队列的过程发生在 MDB 中。然后我使用接收方法等待响应,超时时间为 20 秒。现在发生的情况是,我发布到队列的请求消息在 20 秒内没有被传递。消息在 20 秒后送达,但此时接收方法返回,我们无法处理收到的请求响应。
我没有使用事务处理会话将消息发布到队列。请告诉我为什么在超时期限之前没有发送消息。
使用 MDB 表明您在某种 Java EE 服务器中运行。您确定没有为您的 MDB 和 JMS 会话启用分布式 (JTA) 事务吗?这将解释在您的方法返回之前没有传递请求消息。即使会话事务被指定为假,也可以启用 JTA 事务。
这篇博文很好地介绍了这个案例,尽管它有点旧了。
简短的回答是在开始等待回复之前使用 UserTransaction 并提交请求事务。