如何在 Java 中发送异步请求并收集响应

扭曲3r

我有一个可以说 2000 个用户 ID 的列表,我想将异步请求发送到同一台服务器,将 id 作为参数传递给WebTarget.

系统将返回映射到 UserReport 类的 JSON。它包括一个List<User>和大小为 1(如果找到用户)。

对于每个结果,我都想将用户保存在数据库中。有没有办法让它全部异步?即,一旦我收到响应,就向数据库发送一个 INSERT。

我发送单个请求的代码:

public UserReport runRequest(String id){
    return this.webTarget.path("some_path")
            .queryParam("id", id)
            .request(MediaType.TEXT_PLAIN_TYPE)
            .get(new GenericType<UserReport >() {});
}

最后一个问题.. 使用 Observable 还是 Future?

扭曲3r

我终于用ExecutorService解决了它Future

我贴出答案:

public List<User> getAllUsers(List<String> ids) {

    List<Future<UserReport>> futures = new ArrayList<>();
    ExecutorService executor = Executors.newFixedThreadPool(10);

    int counterU = 0;
    for (String id : ids) {
        Callable<UserReport> task = () -> {
            return runRequest(id);
        };
        futures.add(executor.submit(task));
        LOGGER.info("Added Task {} for UserId {}.", counterH++, id);
    }

    List<User> toReturn = new ArrayList<>();

    for (Future<UserReport> future : futures) {
        try {
            UserReport report = future.get();

            if (report.getUsers() != null) {
                User temp = report.getUsers().get(0);
                LOGGER.info("Got details for User {}.", temp.getId());
                toReturn.add(temp);
                insertUserToDB(temp);
            }

        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    executor.shutdown();
    return toReturn;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在HTTP请求中发送Java对象?

来自分类Dev

如何在没有分块响应的纯Java项目中的Play框架中发送InputStream?

来自分类Dev

如何在Java中发送响应期间压缩Rest服务中的数据(对象)

来自分类Dev

如何在JAVA中的HttpURLConnection中发送PUT,DELETE HTTP请求

来自分类Dev

如何在URL中发送JSON数据作为Java中的请求参数

来自分类Dev

如何使用JSON正文在Java中发送发布请求

来自分类常见问题

如何在异步httpclient java 11中将多个异步get请求的响应写入单个文件?

来自分类Dev

如何在IIS中发送“证书请求”

来自分类常见问题

如何在Go中发送POST请求?

来自分类Dev

如何在SSH中发送HTTP请求?

来自分类Dev

如何在Jmeter中发送并发请求

来自分类Dev

如何在php中发送SOAP请求

来自分类Dev

如何在IIS中发送“证书请求”

来自分类Dev

如何在Java中发送带有多个附件的邮件

来自分类Dev

如何在Simple Java Socket Server中发送结束块?

来自分类Dev

如何在Angular JS中发送Java对象

来自分类Dev

如何在Java中发送文本/ HTML电子邮件?

来自分类Dev

如何在 Java 中发送电子邮件?

来自分类Dev

我如何在java中发送带有“soap”的文件

来自分类Dev

如何在Android Java中发出相同的cURL请求?

来自分类Dev

如何在Java中发出后卷曲请求

来自分类Dev

如何从Java发送压缩的(gzip)JSON作为对Ajax请求的响应?

来自分类Dev

如何在JavaScript中访问在AJAX请求中作为响应发送的自定义Java对象?

来自分类Dev

如何在Java中使用Httpunit发送Multipart请求

来自分类Dev

如何使用URL中的param在java中发送这样的json发布请求?

来自分类Dev

如何在Restlet中发送错误响应?

来自分类Dev

Dart Chrome扩展程序:如何在onMessage中发送响应?

来自分类Dev

如何在Express JS JSON响应中发送时间戳?

来自分类Dev

如何在for循环Swift中发送响应POST urlsession任务?

Related 相关文章

  1. 1

    如何在HTTP请求中发送Java对象?

  2. 2

    如何在没有分块响应的纯Java项目中的Play框架中发送InputStream?

  3. 3

    如何在Java中发送响应期间压缩Rest服务中的数据(对象)

  4. 4

    如何在JAVA中的HttpURLConnection中发送PUT,DELETE HTTP请求

  5. 5

    如何在URL中发送JSON数据作为Java中的请求参数

  6. 6

    如何使用JSON正文在Java中发送发布请求

  7. 7

    如何在异步httpclient java 11中将多个异步get请求的响应写入单个文件?

  8. 8

    如何在IIS中发送“证书请求”

  9. 9

    如何在Go中发送POST请求?

  10. 10

    如何在SSH中发送HTTP请求?

  11. 11

    如何在Jmeter中发送并发请求

  12. 12

    如何在php中发送SOAP请求

  13. 13

    如何在IIS中发送“证书请求”

  14. 14

    如何在Java中发送带有多个附件的邮件

  15. 15

    如何在Simple Java Socket Server中发送结束块?

  16. 16

    如何在Angular JS中发送Java对象

  17. 17

    如何在Java中发送文本/ HTML电子邮件?

  18. 18

    如何在 Java 中发送电子邮件?

  19. 19

    我如何在java中发送带有“soap”的文件

  20. 20

    如何在Android Java中发出相同的cURL请求?

  21. 21

    如何在Java中发出后卷曲请求

  22. 22

    如何从Java发送压缩的(gzip)JSON作为对Ajax请求的响应?

  23. 23

    如何在JavaScript中访问在AJAX请求中作为响应发送的自定义Java对象?

  24. 24

    如何在Java中使用Httpunit发送Multipart请求

  25. 25

    如何使用URL中的param在java中发送这样的json发布请求?

  26. 26

    如何在Restlet中发送错误响应?

  27. 27

    Dart Chrome扩展程序:如何在onMessage中发送响应?

  28. 28

    如何在Express JS JSON响应中发送时间戳?

  29. 29

    如何在for循环Swift中发送响应POST urlsession任务?

热门标签

归档