Spring Boot将请求放入队列并等待其他请求先完成

时间:2019-03-18 09:05:46

标签: java spring-boot tomcat

我在Spring Boot中有一个应用程序,当我加载网页时,它会触发服务并从中获取结果。由于在数据库中进行搜索,因此响应需要一些时间(10-15)秒。因此,如果我关闭该网页并打开同一页面的另一个实例,那么即使我已经关闭了该网页,Spring Boot也会将该请求放入队列中并等待第一个请求完成。另外,如果在队列中有那么多请求,tomcat服务器就会崩溃。

到目前为止,我所做的是我将application.properties中的tomcat线程修改为

server.tomcat.max-threads=20

那么无论如何我可以使其成为多线程的吗?

Note : The number of requests can be more than 20 also

我正在为此应用程序使用Spring Boot 1.5.2

编辑: 我也有一个类似的应用程序正在Spring boot 2中运行,并且该应用程序没有这种类型的问题。两者的应用程序逻辑几乎相同,但是第二个应用程序查询花费的时间要少一些。

1 个答案:

答案 0 :(得分:0)

更好的设计将意味着具有两个端点的服务:

  1. 一个POST URL,它允许用户将请求发送到服务器并获取密钥令牌。服务器将消息放入队列并返回令牌。
  2. 一个GET URL,允许用户发送令牌并获得响应,或者如果没有从队列返回,则不返回响应。

您应该注册一个侦听器池,该侦听器池将请求从队列中取出,并将其放入数据库(键令牌/值对)中。当用户发送GET请求以获取其令牌时,服务器端会在数据库中查找该令牌并返回结果。

如果您的数据库搜索需要10到15秒,则应考虑加快速度。您有合适的索引吗?分区?这是关系数据库吗?