使用Spring @Async

时间:2016-07-02 18:46:47

标签: asynchronous spring-boot completable-future

我正在使用spring boot在我的应用程序中开发服务。

我有一个场景,其中提交给后端的请求需要一些时间才能完成。

为了避免等待客户端,我想立即返回响应,并显示您的请求已被接受的消息。该请求将在后台线程中进行。

我看到Spring提供了@Async注释,可用于从主线程创建一个单独的处理线程,并使用它可以在单独的线程中卸载处理。

我想要做的是当我将初始响应返回时,我还希望为客户端提供跟踪密钥/令牌,客户端稍后可以使用它来检查请求的状态。

由于可能有多个客户端将访问该服务,因此应该有一种方法可以唯一地识别每个客户端的请求。

我发现Spring Async或Future中没有这样的功能可以返回跟踪ID。

我认为有一种可能性将Future放回HttpSession中,然后用它来检查客户端的状态。但是,我不想使用HttpSession,并希望我的服务无国籍。

我有什么办法/方法可以达到我的要求。

谢谢,

BS

1 个答案:

答案 0 :(得分:1)

在调用Async方法之前生成 ,并将其传递给方法:

String key = generateUniqueKey();
callAsyncMethod(key);
return key;

Async方法必须在某处保持执行状态(让我们称之为dataStore)。当客户端使用询问状态时,您可以在dataStore上查找并返回它。