Akka HTTP附带一个客户端API,作为Typesafe支持的所有东西,我们还为它提供了一个Java API。 Documentation for the client side API is available online.
有许多不同的API可供选择,看了上面的文档,但最简单的一种是singleRequest
:
// valid for Akka Http 1.0 (experimental), APIs may change slightly still
final ActorSystem system = ActorSystem.create();
final ActorMaterializer materializer = ActorMaterializer.create(system);
final Future<HttpResponse> responseFuture =
Http.get(system)
.singleRequest(HttpRequest.create("http://akka.io"), materializer);
阿卡HTTP不支持TLS/SSL。有一点不同于Play's WS的是它的水平更低,并且让你更好地控制如何/何时/什么。 WS更简单,也是异步的。 Akka HTTP能够流响应正文,而WS和一些其他HTTP客户端无法做到这一点。使用Akka Streams获得响应正文流:response.entity().getResponseBytes()
,这是一个Source<ByteString, ?>
。
无论是Play的WS还是Akka HTTP的客户端都应该尽你所需,挑选适合你的用例。如果你需要流媒体 - 阿卡,如果你需要非常简单的东西 - 播放。
跟进,如果你是从一个演员发出Http请求,并希望回应作为消息回来。您可以使用pipeTo模式来管Future
回到Actor
像这样:
import static akka.pattern.Patterns.pipe;
// ...
Future<HttpResponse> response = Http.get(system)
.singleRequest(HttpRequest.create("http://akka.io"), materializer);
pipe(response, context.dispatcher()).to(self);
这个例子更像是用一个演员系统的外部。如果我想从一个actor中发出一个http请求,我可以在actor列表中收到类似消息的响应吗? – George
当然,只要使用'pipeTo'模式来获取'Future'作为消息,我会更新上面的答案。 –
我已经添加了在演员中使用HTTP客户端的文档(一个完整的例子)的文档,这里是公关:https://github.com/akka/akka/pull/18611快乐的徒步! –