问题 - 即使在成功处理之后,Weblogic JMS持久性消息也会重新传递给MDB

时间:2014-02-19 13:36:32

标签: java timeout jms weblogic message-driven-bean

我有一个带有小尺寸消息的weblogic JMS持久队列。但是,我的MDB逻辑需要至少2分钟来处理消息。我正在测试我的设置,队列中只有一条消息,而我遇到的问题是MDB仍在处理消息,一分钟之后,我可以看到消息被重新传递,另一个mdb strats处理它。第二个失败,因为我的表中有一个唯一的constaint。第一个MDB仍在继续,并在2分钟后成功完成。

我在尝试将消息发送到队列时尝试使用CLIENT_ACKNOWLEDGE和DUPS_OK_ACKNOWLEDGE,我可以看到消息仍然存在于持久存储(oracle表)中,即使在MDB开始处理它之后也是如此,因为它花了2分钟,它一分钟之后再发送,这是不理想的。只有在第一个MDB成功完成后才会从存储中删除msg。

我尝试将weblogic默认重新传送延迟设置为600000毫秒,但同样的事情发生了,除了它现在等待600000毫秒才能重新传送,虽然第一个现在已经成功完成了消息。

考虑到我的过程需要2分钟或更长时间来完成,有些人可以帮助我正确的设置吗?因此,MDB收到消息后,消息不会被重新传递或从持久性存储中删除?

1 个答案:

答案 0 :(得分:1)

问题解决了。 weblogic-ejb-jar.xml中的MDB超时设置为60秒。由于我预计我的MDB运行超过一分钟,现在我将其设置为600秒,现在它不会尝试重新启动。之前一分钟后,MDB超时发生,因此消息重新传递。一旦MDB超时,MDB继续处理,但JMS试图重新发送消息。现在增加超时,这个问题不会发生。 感谢。