通过Java中的AKKA同时调用外部REST API

时间:2017-08-23 05:12:26

标签: java rest concurrency akka

我正在努力 通过其API

获取Tesla Server的汽车信息

。我想同时做到.i.e 使用AKKA演员并行获取多辆汽车的信息

  

我的方法:

(1)首先获得汽车总数。

(2)创建等于汽车数量的演员。

(3)在每个actor内部调用rest API以获取并行的汽车信息。即将为演员提供包含车辆ID的网址。

我的做法是否正确?

具体来说,在第3点,我使用来自AsyncHttpClient的{​​{1}}来调用每个演员内部的特斯拉服务器。在每个actor中使用com.ning是否确保每个actor都将异步发送请求到服务器而不阻塞其他actor?

如果需要,将提供进一步的信息。我是AKKA的初学者。看了很多线程但找不到我想要的东西。

1 个答案:

答案 0 :(得分:1)

特别是对于第3点,只要您在演员中使用基于Future的API,演员就不会阻止。

一般来说,如果不知道为什么每辆车选择使用一名演员,就很难说出你的方法。

请考虑以下问题:为什么您不能简单地创建listOfCars: List[String]个网址并使用Future.traverse(listOfCars)(downloadCarDataForUrl _)

最后,我不知道AsyncHttpClient的行为如何,但我会仔细检查,如果你有数千辆汽车的清单,AsyncHttpClient将不会同时下载所有汽车......如果在这种情况下,您可能会被api提供商很快阻止。如果这成为一个问题,你可以查看akka-http,它只使用与某个主机的连接数限制。