我正在使用spring boot在我的应用程序中开发服务。
我有一个场景,其中提交给后端的请求需要一些时间才能完成。
为了避免等待客户端,我想立即返回响应,并显示您的请求已被接受的消息。该请求将在后台线程中进行。
我看到Spring提供了@Async注释,可用于从主线程创建一个单独的处理线程,并使用它可以在单独的线程中卸载处理。
我想要做的是当我将初始响应返回时,我还希望为客户端提供跟踪密钥/令牌,客户端稍后可以使用它来检查请求的状态。
由于可能有多个客户端将访问该服务,因此应该有一种方法可以唯一地识别每个客户端的请求。
我发现Spring Async或Future中没有这样的功能可以返回跟踪ID。
我认为有一种可能性将Future放回HttpSession中,然后用它来检查客户端的状态。但是,我不想使用HttpSession,并希望我的服务无国籍。
我有什么办法/方法可以达到我的要求。
谢谢,
BS
答案 0 :(得分:1)
在调用Async
方法之前生成键 ,并将其传递给方法:
String key = generateUniqueKey();
callAsyncMethod(key);
return key;
Async
方法必须在某处保持执行状态(让我们称之为dataStore)。当客户端使用键询问状态时,您可以在dataStore上查找并返回它。