使用Java的Akka中的REST客户端

是否有任何无缝机制来执行来自Akka的restful请求(仅使用带有java的akka​​)。 有一个喷雾客户端http://spray.io/documentation/1.2.3/spray-client/但它接缝没有api for java或ssl支持。
还有Akka-Http包,但仍然是实验性的,我找不到客户端api的描述。

到目前为止,我有一种方法可以使用泽西客户端( https://jersey.java.net )并隐藏Akka路由器后面的同步调用,其中有一些演员来完成这项工作。

还有其他建议吗?

Akka HTTP附带了一个客户端API,并且作为Typesafe支持的所有内容,我们还为它提供了一个Java API。 客户端API的文档可在线获取。

有许多不同的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 responseFuture = Http.get(system) .singleRequest(HttpRequest.create("http://akka.io"), materializer); 

Akka HTTP确实支持TLS / SSL。 与Play的WS不同的一点是它的级别更低,并且可以让你更好地控制如何/何时/什么。 WS更易于使用,也是异步的。 Akka HTTP能够流式传输响应主体 ,而WS和其他一些HTTP客户端无法做到这一点。 使用Akka Streams ,通过获取响应主体流来实现流式传输: response.entity().getResponseBytes() ,它是Source

Play的WS或Akka HTTP的客户端应该做你需要的一切,选择更适合你的用例。 如果你需要流式传输 – Akka,如果你需要非常简单的东西 – 玩。


如果您正在从Actor发出Http请求并希望响应作为消息返回,请跟进。 您可以使用pipeTo模式将Future传递回Actor如下所示:

 import static akka.pattern.Patterns.pipe; // ... Future response = Http.get(system) .singleRequest(HttpRequest.create("http://akka.io"), materializer); pipe(response, context.dispatcher()).to(self);