Я бы сказал, что Спрей - ваш лучший выбор Тем не менее, он не может быть использован с 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.