gpt4 book ai didi

java - AsyncRestTemplate 什么时候发送请求?

转载 作者:行者123 更新时间:2023-11-30 08:45:57 24 4
gpt4 key购买 nike

今天在AsyncRestTemplate上做了一些实验。下面是一段示例代码:

ListenableFuture<ResponseEntity<MyObject[]>> result 
= asyncRestTemplate.getForEntity(uri, MyObject[]);
List<MyObject> objects = Arrays.asList(result.get().getBody());

令我惊讶的是,请求并没有在第一行发送到 uri(即在调用 getForEntity 之后),而是在调用 result.get() 之后发送。

这不是一种同步的做事方式吗?

最佳答案

执行异步请求的整个想法是,您不想等待异步任务开始/完成,或者您希望主线程在请求​​ Future 实例的结果之前执行其他任务。在内部,AsyncRestTemplate 准备一个 AsyncRequest 并调用 executeAsync 方法。

AsyncClientHttpRequest request = createAsyncRequest(url, method);
if (requestCallback != null) {
requestCallback.doWithRequest(request);
}
ListenableFuture<ClientHttpResponse> responseFuture = request.executeAsync();

有两种不同的实现 - HttpComponentsAsyncClientHttpRequest(使用 Apache http component 库中提供的高性能异步支持)和 SimpleBufferingAsyncClientHttpRequest(使用 J2SE 类提供的设施)。在 HttpComponentsAsyncClientHttpRequest 的情况下,它在内部有一个线程工厂(不是 spring 管理的 AFAIK),而在 SimpleBufferingAsyncClientHttpRequest 中,提供了 Spring 管理的 AsyncListenableTaskExecutor。重点是在所有情况下都有某种 ExecutorService 能够异步运行任务。当然,与这些线程池一样,任务的实际开始时间是不确定的,取决于许多因素,如负载、可用 CPU 等,因此不应依赖。

关于java - AsyncRestTemplate 什么时候发送请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33103096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com