gpt4 book ai didi

java - 问题 - 即使在成功处理后,Weblogic JMS 持久消息仍重新传递到 MDB

转载 作者:行者123 更新时间:2023-12-01 13:24:02 26 4
gpt4 key购买 nike

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

我在将消息发送到队列时尝试使用 CLIENT_ACKNOWLEDGE 和 DUPS_OK_ACKNOWLEDGE,并且我可以看到即使在 MDB 开始处理它之后,该消息仍保留在持久存储(oracle 表)中,并且由于需要 2 分钟,因此它一分钟后重新传送,这并不理想。仅当第一个 MDB 成功完成该消息后,该消息才会从存储中删除。

我尝试将 weblogic Default Redelivery Delay: 设置为 600000 ms,但同样的事情发生了,除了它现在在重新传递之前等待 600000 ms,即使第一个现在已成功完成消息。

考虑到我的进程需要 2 分钟或更长时间才能完成,因此有人可以帮助我进行正确的设置,我应该使用该设置,因此消息不会重新传递,或者在 MDB 收到消息后立即从持久存储中删除?

最佳答案

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

关于java - 问题 - 即使在成功处理后,Weblogic JMS 持久消息仍重新传递到 MDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21882127/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com