Использование Akka для совершения вызовов веб-службы из приложения Play

Я новичок в программировании с платформой Play, а также с Akka, хотя я читал о них некоторое время. Теперь я начинаю приложение с доказательством концепции по умолчанию/основной среде воспроизведения. Мой вопрос связан с клиентом api веб-службы в Play (http://www.playframework.org/documentation/2.0.1/ScalaWS).

Это приложение в основном должно оповещать о звонках на удаленный веб-сервис SOAP как можно более масштабируемым и эффективным. Браузер делает ajax-звонки в JSON, приложение Play должно преобразовывать их в SOAP/XML и наоборот в ответ.

Если я использовал клиент веб-службы воспроизведения непосредственно через контроллер, эти вызовы могут быть асинхронными, что намного лучше, чем то, что мы делаем сейчас (блокирование). Однако я не понимаю, как именно это будет вести себя при большой нагрузке. Будет ли concurrency/управление потоками в значительной степени оставлено на базовом сервере Netty? У меня есть способ настроить его?

Альтернативой может быть использование актерской системы Akka от контроллеров, где я могу контролировать политику маршрутизации, размер пула, отказоустойчивость и т.д. Если я возьму этот подход, будет ли еще смысл использовать Play async WS client? Если да, то будет ли этот подход (составления фьючерсов?) Рекомендуемым шаблоном?

Еще один фактор, который, по-видимому, делает подход Акка более привлекательным, заключается в том, что у этого приложения в конечном итоге будет несколько других обязанностей, поэтому мы могли бы контролировать/настраивать ресурсы, разрешенные для этой ActorSystem, и уменьшать риск того, что все приложение будет зависеть от SOAP обслуживание.

Ответ 1

Два параметра, которые вы детализируете, будут работать:

  • Использовать API-интерфейс воспроизведения для WS для асинхронной обработки запросов/ответов.
  • Используйте Akka, чтобы сделать то же самое и управлять своим WS-вызовом синхронно в вашем акторе.

Во-первых, нет правильного или неправильного решения.

Игра! Швы API WS API проще всего реализовать и протестировать. Многие люди в сообществе полагаются на это (я знаю).

С другой стороны, даже если решение Akka швы тяжелее (не так много), чтобы настроить, это приносит вам большую гибкость в будущем. Вы можете просто использовать Async play! блоков и работать с promises для вычисления async. Существует также неявные преобразования между play promises и akka future. Наконец, чтобы следить за своими актерами, вы можете взглянуть на Консоль безопасности.

Если большая вещь - это выступления, преждевременная оптимизация часто приводит к большей (и ненужной) сложности. Что касается меня, я бы начал с API WS и, если потребуется, в будущем перешел к решению Akka.