好吧,实际上 JBoss 确实会发送消息,但只有在 EJB 启动的当前事务完成时才会发送消息。
JBoss 4.0.3 和 Spring 的 JmsTemplate 存在这个问题。EJB 将消息发送到具有临时队列作为reply_to 字段的队列。然后,在同一个事务中,我们监听第一个 MDB 给出的响应。问题是 JmsTemplate 的方法“send”在事务完成后没有执行。因此,当消息发送到队列并由 MDB 处理时,临时队列的侦听器已经消失。
这称为“同步接收”
有两件事改变了这种行为,但确实引起了一些担忧:
将 EJB 的事务类型更改为 BMT。(关注:BMT 很烂)
创建一个线程,它所做的只是调用 JmsTemplate.send() 方法。
作为旁注,这是一个在 weblogic 环境中正常工作的 EJB,并且消息确实会在应该发送的时候发送,而不是在事务结束时发送。
谢谢你的帮助。