当前位置: 首页 > 知识库问答 >
问题:

Spring RestTemplate-get请求批量传递

郎喜
2023-03-14

我需要查询一个服务器的链接,可以通过给服务器一个引用来获得。

下面是最有效的方法吗?它看起来资源非常密集,大约需要4672ms来生成

我查看了RESTTemplate的文档:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/resttemplate.html#getforentity-java.lang.string-java.lang.class-java.util.map--但是似乎没有更简单的方法来完成我想要做的事情。

ArrayList<String> references = new ArrayList<>();
ArrayList<String> links = new ArrayList<>();
RestTemplate restTemplate = new RestTemplate(); 
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
for (int i = 0; i < 10; i++) {
    ResponseEntity<String> resource = restTemplate.getForEntity(references.get(i), String.class);
    links.add(resource.getBody().toString());
}

编辑:

根据建议,我将html" target="_blank">代码更改为:“异步执行需要设置AsyncTaskExecutor”,但我得到了一个错误:

ArrayList<String> references = new ArrayList<>();
ArrayList<String> links = new ArrayList<>();
AsyncRestTemplate asyncRestTemplate = new AsyncRestTemplate(new CustomClientHttpRequestFactory()); 
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
for (int i = 0; i < 10; i++) {
    Future<ResponseEntity<String>> resource = asyncRestTemplate.getForEntity(references.get(i), String.class);
    ResponseEntity<String> entity = resource.get(); //this should start up 10 threads to get the links asynchronously
    links.add(entity.getBody().toString());
}

我查看了引用文档,但没有一个构造函数允许我同时设置AsyncListenableTaskExecutor和ClientHttpRequestFactory(我使用的ClientHtPrequestFactory-CustomClientHtPrequestFactory-CustomClientHtPrequestFactory只是扩展了SimpleClientHtPrequestFactory,这样我就可以成功地获得重定向链接

共有1个答案

西门高歌
2023-03-14

在这里,您是按顺序执行这些REST调用--也就是说,没有什么是并行执行的。

您可以使用RestTemplate的异步变体并并行地进行这些调用。

 类似资料:
  • 批量调用 TOP 接口 参数 名称 类型 是否可选 含义 options Object 选项 options.query Array 请求参数数组 options.query[].topOptions Object 请求参数 options.query[].topOptions.method String TOP 接口名称 options.success Function optional 调用成

  • web3.BatchRequest类用来创建并执行批请求。 调用: new web3.BatchRequest() new web3.eth.BatchRequest() new web3.shh.BatchRequest() new web3.bzz.BatchRequest() 参数: 无 返回值: 一个对象,具有如下方法: add(request): 将请求对象添加到批调用中 execut

  • 一种写法同时支持 Curl 和 Swoole use \Yurun\Util\YurunHttp\Co\Batch; use \Yurun\Util\HttpRequest; $result = Batch::run([ (new HttpRequest)->url('https://www.imiphp.com'), (new HttpRequest)->url('https:

  • 向传递的 URL 发出一个 GET 请求。 使用 XMLHttpRequest web API 向给定的 url 发出 get 请求。 通过调用给定的 callback 和 responseText 来处理 onload 事件。 通过运行提供的 err 函数,处理onerror事件。 省略第四个参数 err ,默认将错误记录到控制台的 error 流。 const httpGet = (url,

  • 本文向大家介绍get请求传参长度的误区?相关面试题,主要包含被问及get请求传参长度的误区?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是来源与浏览器或web服务器,浏览器或web服务器限制了url的长度。为了明

  • 我有一个具有OAuth2授权的Spring Cloud应用程序: 我添加了这个安全配置: github:https://github.com/rcbandit111/OAuth2/blob/master/src/main/java/org/engine/security/WebSecurityConfig.java 打开Angular应用程序时,出现访问错误: 您知道我需要应用什么配置才能在没有强