Смешивание Akka 2, рамки Play2-mini и HTTP - PullRequest
6 голосов
/ 06 марта 2012

С выпуском Akka 2 модули HTTP Akka были заменены возможностью использования Play2-mini , где Play2-mini выглядит как Play2 без контроллера вида модели.

Граница между реализацией службы REST и созданием HTTP-клиента отсутствует. Например, я хочу создать веб-службу (необязательно REST) ​​и HTTP-клиента в одной службе, то есть HTTP-прокси. Я использую Akka или Play2-mini?

Я создал такой сервис в Finagle и хотел бы повторить упражнение с Akka и / или Play2-mini, чтобы увидеть, как оно сравнивается.

На высоком уровне, как выглядит архитектура? Как эти продукты сочетаются друг с другом?

Ответы [ 2 ]

3 голосов
/ 12 апреля 2012

Я бы сказал, что Спрей - ваш лучший выбор Тем не менее, он не может быть использован с Java. Мы используем фреймворк play2-mini, но есть некоторые проблемы. Непонятно, как подключить его к Akka с Java, по сравнению со Spray, который полностью построен на этом понятии - когда приходит запрос, вы получаете сообщение Request для актера.

С помощью Play вы должны создать собственное соединение: Т.е. внутри static (ролей глаза) метод запроса:

Timeout timeout = new Timeout(Duration.parse("20 seconds"));
Future<Object> future = Patterns.ask(myActor, new ClientMessage(null), timeout);

Promise<Object> sdf = Akka.asPromise(future);
Promise<Result> r2 = sdf.map(new Function<Object, Result>() {

@Override
public Result apply(Object a) throws Throwable {
    val wsrm = (MyMessage)a;
    return ok((wsrm).val); // String value from message object
}

});
Result test2 = async(r2);
return test2;

Что хорошо работает. И Play также использует события AKKA в своей системе, так что вы также можете создавать актеров, используя их контексты.

К сожалению, в настоящее время Play2-mini вовсе не мини, он зависит от всей платформы Play, что также вызывает больше проблем. По-видимому, они работают над релизом, который AFAIK собирается разделить Play на его модули, и я не думаю, что это произойдет в ближайшее время.

ИМО, Спрей - намного лучший выбор. Это беглость подходит намного лучше с AKKA, но неудобно, что я должен использовать Java здесь, поэтому я не мог использовать его: https://github.com/spray/spray/issues/96

Что касается вопроса http клиента / службы - AKKA сама не имеет никаких возможностей HTTP, поэтому в этом случае вам нужно взаимодействовать с сервером HTTP. Вы можете использовать асинхронные запросы, чтобы поддерживать соединение в активном состоянии, в то время как ваша система акторов асинхронно передает сообщения вашему клиенту http-клиента для асинхронного получения ответа http, отправляя сообщение обратно на уровень веб-сервиса и возвращая его для воспроизведения.

Надеюсь, это прояснит ситуацию. Я также был в замешательстве, до пары дней исследований;) Если есть что-то еще, что я могу помочь прояснить, пожалуйста, дайте мне знать - на благо сообщества! ;)

У аэрозольного баллона есть асинхронный http-клиент, но для нас, людей, застрявших на земле Java, есть также: https://github.com/sonatype/async-http-client,, который вы, вероятно, можете использовать с AKKA.

1 голос
/ 19 апреля 2012

С тех пор, как задал этот вопрос, я нашел этот замечательный пост в официальном блоге Akka:

http://letitcrash.com/post/17888436664/a-sample-application-showcasing-play-mini-and-akka

...