Spring MVC异步方法(RXJava)

时间:2017-12-19 21:34:52

标签: java spring spring-mvc rx-java

编辑:我的答案在下面

我有一个特定的场景,我可以使用一些指导。我有一个POST端点,我想调用一些异步方法(我不关心结果,所以它们是无效的),并立即返回给用户。例如:

@RequestMapping(value = "/", method = RequestMethod.POST)
public ResponseEntity subscribe(@RequestBody SomePayload payload) {
    CompletableFuture.runAsync(() -> someService.longRunningVoidMethod(payload));
    return new ResponseEntity(HttpStatus.OK);
}

有没有办法使用RXJava(我正在使用的API使用RXJava,所以我想遵循与其余部分相同的模式)?比如,一个不会发出任何东西的Observable?我是RXJava的新手所以我正在寻求一些更具体的建议,我正在努力寻找自己的阅读。

谢谢!

2 个答案:

答案 0 :(得分:1)

想出来......

@RequestMapping(value = "/", method = RequestMethod.POST)
public ResponseEntity subscribe(@RequestBody SomePayload payload) {
    Completable.fromAction(() -> someService.longRunningVoidMethod(payload))
           .subscribeOn(Schedulers.io())
           .subscribe();
    return new ResponseEntity(HttpStatus.OK);
}

我猜.subscribeOn(Schedulers.io())使该函数在后台任务上执行,而不是在继续之前等待它完成。

答案 1 :(得分:0)

如果您对结果不感兴趣,请使用 Completable Single 如果您期望严格的1个结果。在所有其他情况下可观察

Completable.fromFuture(future).subscribe();