从远程服务获取数据哪种方式更好

我知道有很多方法可以GET从遥控器获取数据。我尝试过这些不同的类型:

  1. 使用curl内的Runtime.getRuntime().exec(...)new ProcessBuilder(...).start();

  2. 使用库作为URLRestTemplate

在使用其中之一之前,我们应该考虑它们之间是否存在一些显着差异?

更新 #0

为什么我会问这个看似主题过于宽泛基于意见的问题?

我遇到使用问题,ProcessorBuilder在高并发系统中,会有一些TimeOut同时使用RestTemplate,有没有?

在挖掘和调试之后,我没有发现与结果完全相关的内容,我问了这个问题以了解我可能忽略了什么

 List<CompletableFuture<GrafanaDashboard>> futureList = dbList.stream()

            .map(boardName -> CompletableFuture.supplyAsync(() -> GrafanaRetriever

                    .parseDashboard(apiUrl, tokenString, boardName), Executors.newCachedThreadPool()))

            .collect(Collectors.toList());

    for (CompletableFuture<GrafanaDashboard> completableFuture : futureList) {

        try {

            dashboards.add(completableFuture.get(30, TimeUnit.SECONDS)); 

           // using ProcessorBuilder, it will hang here and some might time out (not all just some)

           // using RestTemplate, it will not wait almost, just smooth and no time out at all;

        } catch (ExecutionException | InterruptedException | TimeoutException e) {

            log.warn("Retrieving data from grafana failed due to TimeOut most likely by {}", apiUrl);

            e.printStackTrace();

        }

    }


慕哥9229398
浏览 112回答 2
2回答

紫衣仙女

使用 rest 模板(或另一个用于 http 请求的 java 库,甚至是在 java URL 包中构建)比使用 Runtime 更好。除了以后可能很重要的可移植性之外,即使您认为现在不需要它,还有其他优点。代码更易于维护和理解(想象一个不理解 curl -D -X -H 等的开发人员)。调试起来更容易。例如,当它花费太长时间并且更容易进行错误处理时,您可以使用某种断路器。您可以在读取它们等过程中处理结果。基本上,您拥有控制权,而不是一些外部工具。使用 Runtime 可能会让您免于编写几行代码,但由于您正在编写 Java 程序,因此最好以 Java 方式进行 ;)

四季花海

对于击中,GET我宁愿使用 Java。由于以下原因:一种。Curl 通常在 *nix 上找到。使用 Java,您的代码应该是平台独立的。如果将来您的代码需要在 Windows 上运行。它将带有 curl 或潜在代码更改的依赖项。湾&nbsp;您可以更好地处理错误,而无需解析 curl 的输出或其退出代码。C。如果 GET API 的输出需要被解析,像 Spring 这样的库可以帮助你。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java