为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥9229398 2021-06-24 18:10:37
我知道有很多方法可以GET从遥控器获取数据。我尝试过这些不同的类型:使用curl内的Runtime.getRuntime().exec(...)或new ProcessBuilder(...).start();使用库作为URL或RestTemplate;在使用其中之一之前,我们应该考虑它们之间是否存在一些显着差异?更新 #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();        }    }
查看完整描述

2 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

使用 rest 模板(或另一个用于 http 请求的 java 库,甚至是在 java URL 包中构建)比使用 Runtime 更好。除了以后可能很重要的可移植性之外,即使您认为现在不需要它,还有其他优点。

代码更易于维护和理解(想象一个不理解 curl -D -X -H 等的开发人员)。调试起来更容易。例如,当它花费太长时间并且更容易进行错误处理时,您可以使用某种断路器。您可以在读取它们等过程中处理结果。基本上,您拥有控制权,而不是一些外部工具。

使用 Runtime 可能会让您免于编写几行代码,但由于您正在编写 Java 程序,因此最好以 Java 方式进行 ;)


查看完整回答
反对 回复 2021-06-30
?
四季花海

TA贡献1811条经验 获得超5个赞

对于击中,GET我宁愿使用 Java。由于以下原因:

一种。Curl 通常在 *nix 上找到。使用 Java,您的代码应该是平台独立的。如果将来您的代码需要在 Windows 上运行。它将带有 curl 或潜在代码更改的依赖项。

湾 您可以更好地处理错误,而无需解析 curl 的输出或其退出代码。

C。如果 GET API 的输出需要被解析,像 Spring 这样的库可以帮助你。


查看完整回答
反对 回复 2021-06-30
  • 2 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信