是否应该在异步应用程序中使用CompletionStage实现所有方法?

时间:2019-07-01 10:15:33

标签: asynchronous playframework architecture completable-future completion-stage

我开始从事将PlayFramework用于开始变得庞大的应用程序的项目。异步应用程序看起来很有希望,但是所有异步处理(异常和错误处理,并行化调用...)都增加了很多复杂性和与业务无关的代码,这是我不太喜欢的东西,因为我一直试图将代码保持在最低限度对于将要开发多年的项目而言,这可能很复杂。我的理解是,我只需要实现返回CompletionStage的异步方法即可阻止对外部REST API和数据库查询的调用。

我在CompletionStage上找到了许多简单的示例,但是我不确定我是否了解如何构造大型异步Web应用程序。 让我们以PlayFramework为例。

它使用默认情况下异步的Actionshttps://www.playframework.com/documentation/2.6.x/JavaAsync#Actions-are-asynchronous-by-default

我了解到,此操作方法中包括的所有未调用外部系统的代码都是异步的。我可以编写较长的计算,循环,使用流,在不同的类,层,不返回CompletionStage 的方法中重构我的代码,所有这些代码仍将是异步的。

我对吗?

如果现在需要对外部API进行数据库调用,文件系统访问或REST调用,则需要为每个调用实现一个返回CompletionStage的方法。我可以在这些方法上进行join()get()的操作,以获取响应并将其用于我的业务代码。

所有这一切足以使我的申请asynchronous吗?有人可以确认或纠正我的上述假设,也许可以解释所有这些异步框架(Play,Vert.x)如何在后台处理多个并行请求?

0 个答案:

没有答案