我使用Spark框架在Java中创建了一个REST API,但是现在正在对请求线程进行大量工作,这会大大减慢请求的速度。
我想通过创建某种后台工作程序/队列来解决这个问题,后台工作程序/队列将完成请求线程所需的所有工作。来自服务器的响应包含客户端将需要的数据(它将显示的数据)。在这些示例中,客户端是Web浏览器。
我不喜欢这种方法,它会使我的API大大复杂化。如果我想获得任何数据,我将不得不提出两个请求。一个用于启动阻塞工作,另一个用于检查状态(并获取阻塞工作的结果)。 API不仅会变得更复杂,而且后端也会变得更复杂。
这是否有效,或者是否有更好的方法来实现我想要实现的目标?
答案 0 :(得分:2)
这两种方法都不比其他方式更有效,因为在任何一种情况下都会完成相同的工作量和时间。在第一种情况下,它将在请求线程上完成,客户端将不知道进度,并且只要运行任务,请求将花费多长时间。这让客户等待回复。
在第二种情况下,您需要增加复杂性,但取决于任务,您可以获得进度状态和可能的其他优势。这有回复的客户投票。
您可以使用异步处理来执行非请求线程的工作,但如果您的大多数请求都是长期运行的请求,那么这可能不会产生任何影响。因此,由您来决定您想要什么,客户将不得不等待相同的数量。