2015-09-29 4 views
2

Есть ли бесшовный механизм для выполнения спокойных запросов от Akka (с использованием akka только с java). Существует спрей-клиент http://spray.io/documentation/1.2.3/spray-client/, но он не содержит api для поддержки java или ssl.
Также есть пакет Akka-Http, но все еще экспериментальный, и я не мог найти описание клиента api.Клиент REST в Акке с Java

До сих пор у меня есть один подход к использованию джерси-клиента (https://jersey.java.net) и скрыть синхронные вызовы за маршрутизатором Akka с некоторым количеством участников, выполняющих эту работу.

Любые другие предложения?

ответ

2

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); 

Akka HTTP не поддерживает TLS/SSL. Одна вещь, которая отличается от Play's WS, заключается в том, что она более низкая, и дает вам больше контроля над тем, как/когда/что. WS проще в использовании, а также асинхронно. Akka HTTP способен поток тело ответа, тогда как WS и некоторые другие HTTP-клиенты не могут этого сделать. Потоки достигаются с использованием Akka Streams, получая поток тела ответа: response.entity().getResponseBytes(), который является Source<ByteString, ?>.

Любая клиентская часть Play или клиентская часть Akka HTTP должны делать все, что вам нужно, выбирать, что больше подходит вашему прецеденту. Если вам нужна потоковая передача - Akka, если вам нужны очень простые вещи - играйте.

Последующие действия, если вы делаете 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); 
+0

Этот пример больше походит для использования снаружи системы актера. Если я хочу сделать HTTP-запрос от актера, могу ли я получить ответ как сообщение в очереди актера? – George

+1

Конечно, просто используйте шаблон 'pipeTo', чтобы вернуть« Будущее »в виде сообщения, я обновлю ответ выше. –

+1

Я добавил документацию (полный пример) для использования HTTP-клиента в Актерах в документации, вот PR: https://github.com/akka/akka/pull/18611 Счастливый hakking! –

Смежные вопросы