gpt4 book ai didi

java - 带有后台工作线程的 Spring Rest API 应用程序

转载 作者:行者123 更新时间:2023-11-30 07:12:50 25 4
gpt4 key购买 nike

我正在使用 Spring 构建一个带有 REST API 的应用程序。我需要 REST API 方法能够将任务(只是对象)添加到队列和后台工作线程中,该线程将在队列为空时等待,或者在队列不为空时一项一项地执行任务。一项一项地执行任务是绝对必要的,并且可能需要 1 秒到几分钟的时间。无需等待并通过rest api发送结果,只需任务已启动的信息

基本上我的想法是这样的(不是我如何编码,我知道使用并发包和执行器可以更好地完成......):

public class Worker implements Runnable {

private Queue<...> queue;

public addTask(... task) {
this.queue.add(task);
this.notify();
}

@Override
public void run(){
check task queue
- wait() if empty
- execute task if not empty
}

}

我尝试过的任何方法都不能与 spring 结合使用。

我有一些java知识,并且已经使用并发制作了一些桌面应用程序,但没有spring经验,所以我只需要指出正确的方向。

这可以使用异步方法(@Async)来完成吗?或者创建定期检查队列的同步线程(组件)是否可以接受?

感谢您的想法。

最佳答案

您可以使用 BlockingQueue 来做到这一点 https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html

我不确定您的系统限制,但具有嵌入式队列的解决方案不会很好地扩展。如果您的服务受到限制,您需要运行多个实例,则可能会出现调用一台服务器比调用另一台服务器花费更长时间的情况。

如果您打算与 Spring 结合使用,您需要将 BlockingQueue 创建为 Bean,以便可以将其注入(inject)到您的工作线程和 Controller 中

关于java - 带有后台工作线程的 Spring Rest API 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38919364/

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