
Содержание статьи
от Мигеля Лопеса
Да, это еще дело.

Akka – популярный набор инструментов на основе актеров для создания параллельных и распределенных приложений в JVM. Эти программы предпочтительно используют Scala или Java.
Он имеет несколько модулей, которые помогают создавать такие приложения и Akka HTTP является одним из них.
Akka HTTP должна утилиты как на стороне клиента, так и на стороне сервера. В этом учебнике мы сосредоточимся на сервере.
Вы должны быть знакомы с Scala, и у вас должны быть установлены и установлены SBT и IntelliJ. Если это не так, проверьте официальные документы.
Без лишних разговоров, давайте создадим API hello world с помощью Scala и Akka HTTP!
Настройка проекта
Не стесняйтесь клонировать репо, убедитесь, что вы используете ветку 2.1-review-project
.
Если нет, мы будем использовать sbt 1.1.6
и Scala 2.12.6
. Проверьте свой build.properties
и build.sbt
файлы, чтобы убедиться, что существующие версии соответствуют этим.
Начнём с добавления необходимых зависимостей. Поскольку Akka HTTP зависит от актеров и потоков, нам также нужно будет добавить эти библиотеки.
Добавьте следующий фрагмент в конце вашего build.sbt
файл:
libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-actor" % "2.5.13", "com.typesafe.akka" %% "akka-stream" % "2.5.13", "com.typesafe.akka" %% "akka-http" % "10.1.3",)
Если вам будет предложено включить автоматический импорт, сделайте это. В противном случае вы можете открыть терминал и cd
в корневой каталог вашего проекта. Тогда беги sbt update
чтобы получить зависимости.
Автоматический импорт обязательно будет обновлять ваш проект каждый раз, когда обновляются определенные файлы, в том числе файлы build.sbt
файл.
Создавайте экземпляры зависимостей
Давайте создадим объект Scala под заглавием “src/main/scala”. Server
. Мы начнем с создания экземпляров зависимостей, необходимых для создания сервера из Akka HTTP.
Во-первых, объект расширит App
черта:
object Server extends App {}
Это позволит нашим Server
объект, который можно запустить.
Нам понадобится хост и порт для привязки сервера, поэтому давайте добавим их сейчас:
val host = "0.0.0.0"val port = 9000
Поскольку Akka HTTP использует актеры и потоки Akka под ним, нам также нужно будет предоставить их зависимость:
implicit val system: ActorSystem = ActorSystem("helloworld")implicit val executor: ExecutionContext = system.dispatcherimplicit val materializer: ActorMaterializer = ActorMaterializer()
Даже если вам не нужно знать, что они делают, чтобы начать разрабатывать HTTP программы Akka, всегда хорошо знать, для чего они предназначены.
An ActorSystem
используется для управления актерами. Он используется для их создания и поиска. Актеры в одной системе обычно имеют одинаковую конфигурацию.
The ExecutionContext
отвечает за исполнение Future
с. Он знает, где и как он должен их выполнять, например, в пуле потоков.
И, наконец, ан ActorMaterializer
отвечает за текущие потоки.
После этого мы можем создать наш приветственный маршрут!
Создайте маршрут
Для создания нашего маршрута мы используем DSL маршрутизации Akka HTTP. Она основана на «слоях» того, что называется директивой. Чтобы получить обзор, не стесняйтесь просматривать их официальные документы.
Добавьте маршрут ниже зависимостей:
def route = path("hello") { get { complete("Hello, World!") }}
У нас есть первый уровень, где мы пытаемся сопоставить путь входящего запроса как «/hello». Если он не отвечает, он будет отклонен.
Если он отвечает, он постарается соответствовать внутренним «директивам». В нашем случае мы сверяем запросы GET. Мы завершаем цикл запроса/ответа сообщением Hello, World.
Запустите сервер
После создания нашего маршрута все, что нам нужно сделать, это запустить сервер:
Http().bindAndHandle(route, host, port)
Мы привязываем наш маршрут к данному хосту и порту с помощью Akka HTTP Http
объект.
Чтобы запустить нашу Server
объекта, вы можете щелкнуть правой кнопкой мыши и нажать Запустить «Сервер».
Дайте ему пару секунд для компиляции, затем перейдите к браузеру. Перейдите к и вы должны увидеть наше «Привет, мир!» сообщения.

Круто, не правда ли?
Заготовка леса
Прежде чем закончить учебник, мы добавим базовое ведение журнала на наш сервер.
Вы могли заметить, что не было обратной связи, когда мы запускали наш Server
объект. Мы не знаем, удалось это или не удалось.
Мы можем лишь предположить, что это сработало, поскольку программа не потерпела сбоя.
Давайте добавим в него регистрацию.
Если вы заглянете в bindAndHandle
функция от Http
объекта, он возвращает будущее ServerBinding
. Мы можем подключить несколько журналов к будущему onComplete
функция.
Давайте сделаем это:
val bindingFuture = Http().bindAndHandle(route, host, port)bindingFuture.onComplete { case Success(serverBinding) => println(s"listening to ${serverBinding.localAddress}") case Failure(error) => println(s"error: ${error.getMessage}")}
Запустите Server
снова, и на этот раз вы должны увидеть:
listening to /0:0:0:0:0:0:0:0:9000
Подведению
Хотя использование Scala и Akka HTTP не является самым быстрым способом разработки API, оно позволяет интегрировать другие модули Akka, такие как актеры, потоки, кластеры и т.д., что облегчает разработку устойчивых и масштабируемых систем.
Сказав это, следует иметь в виду, что разработка программы с помощью Scala и/или Akka не обязательно означает, что она будет устойчивой и масштабируемой. Для этого вам все равно нужно будет проделать работу, но это проще, чем с другими технологиями.
Если вам понравился Akka HTTP, у нас есть бесплатный курс, который быстро начнет ваш путь к разработке API с его помощью. Вы создадите API для программы Todo, объясняя шаг за шагом. Проверь! ??
Akka HTTP Quickstart
Узнайте, как создать веб-приложения и API с помощью Akka HTTP в этом бесплатном курсе!link.codemunity.io