【问题标题】:Spring MVC async method (RXJava)Spring MVC 异步方法(RXJava)
【发布时间】:2017-12-21 00:37:34
【问题描述】:

编辑:我的答案如下

我有一个特定的场景,我可以使用一些指导。我有一个 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 很陌生,所以我正在寻求一些更具体的建议,我自己也很难找到阅读的内容。

谢谢!

【问题讨论】:

    标签: java spring spring-mvc rx-java


    【解决方案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()) 使函数在后台任务上执行,而不是等待它完成后再继续。

    【讨论】:

      【解决方案2】:

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

      Completable.fromFuture(future).subscribe();
      

      【讨论】:

      • 谢谢,带我进入 Completable 兔子洞,让我找到了似乎用于线程操作的调度程序。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 2018-07-09
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      • 2020-09-15
      相关资源
      最近更新 更多