gpt4 book ai didi

java - 消息驱动的 bean 和超时中的长时间运行任务

转载 作者:行者123 更新时间:2023-11-29 06:58:41 24 4
gpt4 key购买 nike

我想使用 MDB 处理一些运行时间非常长的任务(数小时),但 MDB 由 JMS 支持,它有一些超时(我认为在 tomEE 中大约 10 分钟)。

更糟糕的是,工作也是持久的。

由于我无法捕获 MDB 上的超时异常(可以吗?),我正在考虑手动处理 JMS 使用者的选项。手动处理它可以通过两种方式完成:同步或异步。

我将异步回退到实现 MessageListener 的无状态 bean,然后我将无法再次处理超时。

同步地,我想,我可以处理 catch block 中的超时,但是,我如何在 TomEE+ 中实现一个实例池/工作线程池/任何正在监听队列、等待作业处理的池? (记住,这里的超时不是等待消息出现在队列中的时间,而是执行长时间运行任务的时间)

最佳答案

为什么不将长时间运行的进程 fork 到一个单独的对象中?>如果有办法控制这些单独对象的池大小,它可能是一种方法。你想尝试一个答案吗? :-)

您不希望不受控制的对象随时间增长?嗯...我知道你要去哪里了。

我唯一能想到的就是使用并发框架中的 FixedThreadPool。生成一个线程来执行长时间运行的任务,并确保 MDB 在移交工作后立即返回。通过在测试环境中分析您的应用程序来控制线程池。

Weblogic 和 Websphere 等应用程序服务器为您提供了 WorkManager 等复杂框架来完成此类任务。

关于java - 消息驱动的 bean 和超时中的长时间运行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29640471/

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