Java Spring Framework:多线程和TaskExecutor

时间:2016-03-05 03:35:58

标签: java spring multithreading spring-mvc workmanagertaskexecutor

设置:Apache Tomcat 8 Web服务器/ Java Spring Framework / MVC

背景:我有多台服务器连接了负载均衡器。每次负载均衡器将请求转发到Web服务器时,服务器都会将请求推送到远程队列。

现在,我正在尝试在我的Web应用程序上设置多个线程,以便这些线程可用于处理远程队列上的请求(从队列中检索它们然后开始处理它们)。

过去,我只处理单个服务器实例。服务器将直接从Controller中的前端接收请求,然后它将生成多个线程以并行处理这些请求。收到第一个请求后,将触发所有调用(线程池创建和其他调用)(请求进入 - >创建线程 - >处理请求)。

问题:现在,我不想在请求进入后创建线程,而是在Web应用程序开始运行后创建线程,以便它可以立即开始从远程队列中提取请求。简单地说,我想将线程创建与请求处理分离。理想情况下,我希望这些线程(固定数量的线程)一直在运行,只要它们处于空闲状态就从队列中提取请求。在Controller中,当服务器收到请求时,我只是将它发送到队列中。

这是我第一次使用Spring框架,所以我不确定什么是做我需要的最好的方法。 Controller(处理传入请求的方法)是我所知道的唯一程序入口点。因此,我不知道在应用程序启动时如何以及在何处创建这些线程。我希望线程非常健壮,因为它们会对请求进行一些繁重的处理。

以下是我提出的一些想法: - 我正在考虑使用TaskExecutor来创建加载上下文时我需要的线程(不确定这是一个好的和强大的方法)。如果我使用TaskExecutor,我应该如何管理这些线程和其他资源的生命周期? - 在我的研究期间,我也来到了WorkManager。我不确定它是否符合我的要求。

任何建议和指示都表示赞赏!

1 个答案:

答案 0 :(得分:0)

我不认为你需要自己担心线程。 Spring对producing and consuming message queues有很多支持。只需连接一个消息监听器,我认为应该开始使用这些消息。