我有一个带有小型消息的weblogic JMS持久队列。但是,我的MDB逻辑至少需要2分钟来处理消息。我正在测试我的设置,队列中只有一条消息,我遇到的问题是,当MDB仍在处理消息时,正好一分钟后,我可以看到消息被重新发送,另一个MDB正在处理它。第二个立即失败,因为我的表中有一个唯一的常量。第一个MDB仍在继续,并在2分钟后成功完成。
在向队列发送消息时,我尝试同时使用CLIENT_ACKNOWLEDGE和DUPS_OK_ACKNOWLEDGE,我可以看到,即使在MDB开始处理消息之后,消息仍会保留在持久存储区(oracle表)中,并且由于这需要2分钟,因此它会在一分钟后重新发送,这并不理想。只有在第一个MDB成功完成后,消息才会从存储中删除。
我尝试将weblogic默认重新交付延迟设置为600000毫秒,但同样的事情也发生了,只是它现在等待600000毫秒才能重新交付,尽管第一个现在已经成功完成了消息。
考虑到我的流程需要2分钟或更长时间才能完成,因此MDB一收到消息就不会重新传递或从永久存储中删除,有人能帮我正确设置吗?
问题已解决。在weblogic-ejb-jar.xml中,MDB超时设置为60秒。由于我预计我的MDB将运行一分钟以上,目前我已将其设置为600秒,现在它不会尝试重新传递。之前一分钟后,MDB超时,因此消息被重新传递。MDB超时后,MDB继续处理,但JMS尝试重新传递消息。增加超时,现在这个问题不会发生。谢谢