7、微服务的异步通信

微服务的异步通信

1. 异步完成 REST 响应

在将所有并行执行同步到单个阶段,并将结果合并到一个列表后,我们可以链式调用更多的 lambda 回调来处理最终的预测列表,并将其作为 REST 响应发送。由于异步回调在不同的线程中执行,我们需要一种方法来完成 REST 响应,而不是从 REST 方法返回最终值。

1.1 传统方法的弊端

虽然我们可以让初始线程休眠,直到异步结果可用,但这种方法存在严重的缺点:
- 需要两个线程来完成响应,但在给定时间内只有一个线程在工作。
- 需要同步线程并将预测列表从一个线程传递到另一个线程,线程同步会带来额外的开销,会降低性能,应尽可能避免。

1.2 异步请求处理

更好的解决方案是从初始方法返回,并在另一个线程中稍后完成响应,这称为异步请求处理。JAX - RS REST API 支持异步处理,允许我们在资源方法返回后提供响应。

1.2.1 使用 CompletionStage

如果我们直接从资源方法返回 CompletionStage ,容器将理解它,完成它,并在返回的 CompletionStage 完成后发送 HTTP 响应。自 Java EE 8 起,资源方法支持将 CompletionStage 作为返回值。示例代码如下:

@GET
@Produces(MediaType.APPLICATION_JSON)
public CompletionStage<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值