1

我已经使用 SpringTaskExecutor和一个ThreadPoolTaskExecutor实现来实现一个带有线程池的异步队列。存储在队列中的对象是小的 JSONObjects(最大 40 字节),但对象的数量会非常大,最多 100,000 个。

现在已经对我们提出了一个新要求,以使这个队列持久化,以便它能够在 JVM/服务器重新启动后继续存在。有没有一种有效的方法可以重用上述实现来保持这个队列,并且不会在我的应用程序中引入太多复杂性?配置本身有什么东西TaskExecutor可以用来实现这个目标,还是我必须求助于其他东西,比如 JMS,或者自定义解决方案,比如写入文件?

任何帮助/想法将不胜感激。

4

1 回答 1

2

ThreadPoolTask​​Executor 仅适用于 Runnable 对象,因此它没有可序列化对象的概念,这些对象恰好在可运行对象中处理。

如果您需要持久化对象,则需要在执行之前执行此操作,然后让服务在重新启动后重新提交它们。如果你想标记执行完成,你的 runnable 可以在它的进程结束时删除持久性,或者你可以使用 ThreadPoolTask​​Executor 上的 submit 方法并监视 Future。

也可以编写一个可以放置在 TaskExecutor 上的顾问(因为在您的情况下它可能是一个 spring 托管 bean),并在那里实现持久化逻辑。

于 2013-08-23T01:01:03.263 回答