- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我不明白如何有效地使用 AsyncRestTemplate
进行外部服务调用。下面的代码:
class Foo {
public void doStuff() {
Future<ResponseEntity<String>> future1 = asyncRestTemplate.getForEntity(
url1, String.class);
String response1 = future1.get();
Future<ResponseEntity<String>> future2 = asyncRestTemplate.getForEntity(
url2, String.class);
String response2 = future2.get();
Future<ResponseEntity<String>> future3 = asyncRestTemplate.getForEntity(
url3, String.class);
String response3 = future3.get();
}
}
理想情况下,我希望同时执行所有 3 个调用,并在它们全部完成后处理结果。 然而在调用 get()
但 get()< 之前,不会获取每个外部服务调用
被阻止。那么这不是破坏了 AsyncRestTemplate
的目的吗?我不妨使用 RestTemplate
。
所以我不明白如何让它们同时执行?
最佳答案
在调度所有异步调用之前不要调用阻塞 get()
:
class Foo {
public void doStuff() {
ListenableFuture<ResponseEntity<String>> future1 = asyncRestTemplate
.getForEntity(url1, String.class);
ListenableFuture<ResponseEntity<String>> future2 = asyncRestTemplate
.getForEntity(url2, String.class);
ListenableFuture<ResponseEntity<String>> future3 = asyncRestTemplate
.getForEntity(url3, String.class);
String response1 = future1.get();
String response2 = future2.get();
String response3 = future3.get();
}
}
您可以在循环中同时执行 dispatch 和 get,但请注意,当前的结果收集效率低下,因为它会卡在下一个未完成的 future 。
您可以将所有 future 添加到一个集合中,并对其进行迭代,以测试每个 future 的非阻塞 isDone()
。当该调用返回 true 时,您可以调用 get()
。
这样,您的集体结果收集将得到优化,而不是按照调用 get()
s 的顺序等待下一个缓慢的 future 结果。
您还可以在 AccyncRestTemplate
返回的每个 ListenableFuture
中注册回调(运行时),并且您不必担心循环检查潜在结果。
关于java - 如何使用 AsyncRestTemplate 同时调用多个电话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35214384/
今天在AsyncRestTemplate上做了一些实验。下面是一段示例代码: ListenableFuture> result = asyncRes
如何测试 AsyncRestTemplate 请求并避免 java.lang.IllegalStateException: Expectations already declared 异常?单个测试用
Spring 4 引入了 AsyncRestTemplate,但我没有看到像 MockRestServiceServer 这样的工具用于此模板。有什么方法可以使用模拟服务器为 AsyncRestTem
我不明白如何有效地使用 AsyncRestTemplate 进行外部服务调用。下面的代码: class Foo { public void doStuff() { Future
我正在使用AsyncRestTemplate从 Springboot 1.5.2 服务对 Google map 进行 API 调用。不幸的是,我的一些搜索字符串包含井号/井号标签 #并且在我的搜索参数
我有一个正在运行的 OAuth2RestTemplate 客户端(我正在使用 spring-security-oauth2 2.0.7.RELEASE)。现在我想将其公开/包装为 AsyncRestT
我正在使用 spring AsyncRestTemplate 帮助程序类开发一个异步 REST 客户端。 客户端需要在每个请求的头部发送一个token。 当使用 HttpAsyncClient(属于
在 WebSphere 中部署 Spring Boot 应用程序。由于它们的 SSL 配置,我们需要明确指定 SSLSocketFactory 以确保应用程序使用 WebSphere 证书而不是默认的
我正在使用 Spring asyncresttempate 同时调用多个服务。这些服务通过 SSL 公开。您能告诉我如何使用 SSL 证书和 AsyncResttemplate 异步调用服务吗?我们可
我已经像这样配置了一个 AsyncRestTemplate,这里只是一个例子来表明我正在使用 HttpComponentsAsyncClientHttpRequestFactory 并初始化 conn
我必须使用不同参数多次使用 RestTemplate 进行 Rest API 调用。 API 相同,但它是正在更改的参数。次数也是可变的。我想使用 AsyncRestTemplate 但我的主线程应该
从一开始,我一直对如何处理 InterruptedException 以及如果花费太多时间如何正确取消 http 请求感到困惑。我有一个库,其中我为我们的客户提供了两种方法,同步和异步。他们可以调用他
当我将 SimpleRequestFactory 与 AsyncRestTemplate 结合使用时,我可以轻松配置 HTTP 代理服务器。 我可以这样做(Kotlin 中的示例代码): @Bean
如何使用 AsyncRestTemplate 将 Spring Retry 与外部调用集成?如果不行,是否有其他框架支持? 我的用例: public void doSomething() throws
我有一种情况需要拦截请求,并且需要在该请求中设置授权 header 。所以我得到了解决方案,我可以使用拦截器来设置该 header ,但是当我检查 AsyncRestTemplate 时,它没有像 R
我正在尝试通过千分尺和普罗米修斯监控我的 Spring Boot 应用程序的其余模板指标。当我使用 ResttemplateBuilder 构建的 Resttemplate 并用于调用另一个 api
我在我的 spring boot 应用程序上启用了内容压缩,每个 API 的响应都被压缩了,但是如果我使用 RestTemplate 访问这些 API,我会得到类似 的内容 "\u001F�\b\u0
我想知道 Spring 3.2 中是否有与 AsyncRestTemplate.exchange 等效的东西。我的大部分应用程序都是在 Spring 3.2 上编写的,我想对 Web 服务进行异步调用
我有一个 Spring Boot 1.3.6 应用程序,开箱即用并使用嵌入式 Tomcat 服务器。该应用程序有一个端点执行一个非常简单的回显请求。 后来我使用 AsyncRestTemplate 定
非常简单的设置: pom.xml 4.0.0 com.example demo-rest-client 0.0.1-SNAPSHOT jar dem
我是一名优秀的程序员,十分优秀!