【问题标题】:Is it possible to make queue in ThreadPoolTaskExecutor persistent是否可以使 ThreadPoolTask​​Executor 中的队列持久化
【发布时间】:2013-08-25 20:35:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: spring queue threadpool persistent threadpoolexecutor


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 2015-08-09
      • 2021-08-08
      • 2017-03-02
      • 2021-01-02
      相关资源
      最近更新 更多