Igen, ez még mindig egy dolog.

Az Akka népszerű színészalapú eszköztár egyidejű és elosztott alkalmazások kiépítésére a JVM-ben. Ezek az alkalmazások többnyire Scalát vagy Java-t használnak.
Számos modulja van, amelyek segítenek ilyen alkalmazások felépítésében, és az Akka HTTP is ezek közé tartozik.
Az Akka HTTP kliens- és szerveroldali segédprogramokkal is rendelkezik. Ebben az oktatóanyagban a szerverre fogunk koncentrálni.
Ismernie kell a Scalát, és telepítenie kell az SBT és az IntelliJ beállításokat. Ha nem ez a helyzet, ellenőrizze a hivatalos dokumentumokat.
Minden további nélkül építsünk egy hello world API-t a Scala és az Akka HTTP használatával!
Projekt beállítása
Klónozza nyugodtan a repót, győződjön meg róla, hogy az ágat használja 2.1-review-project
.
Ha nem, akkor az sbt-t 1.1.6
és a Scalát fogjuk használni 2.12.6
. Ellenőrizze a fájljait, build.properties
és ellenőrizze build.sbt
, hogy az ottani verziók megfelelnek-e ezeknek.
Kezdjük a szükséges függőségek összeadásával. Mivel az Akka HTTP színészektől és adatfolyamoktól függ, ezeket a könyvtárakat is hozzá kell adnunk.
Adja hozzá a következő részletet a build.sbt
fájl végéhez :
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",)
Ha a rendszer kéri az automatikus importálás engedélyezését, akkor tegye meg. Ellenkező esetben megnyithat egy terminált és cd
a projekt gyökérkönyvtárába. Ezután fuss, sbt update
hogy megkapd a függőségeket.
Az automatikus importálás biztosítja a projekt minden egyes frissítését, amikor bizonyos fájlokat, beleértve a build.sbt
fájlt is, frissítenek .
Azonnali függőségek
Hozzunk létre egy Scala objektumot az „src / main / scala” néven Server
. Először a szerver létrehozásához szükséges függőségeket szinkronizáljuk az Akka HTTP-vel.
Először az objektum kiterjeszti a App
tulajdonságot:
object Server extends App {}
Ez lehetővé teszi az Server
objektumunk futhatóságát.
Szükségünk lesz egy gazdagépre és egy portra a szerver összekapcsolásához, ezért adjuk hozzá őket most:
val host = "0.0.0.0"val port = 9000
Mivel az Akka HTTP Akka színészeket és alatta lévő streameket használ, meg kell adnunk a függőségüket is:
implicit val system: ActorSystem = ActorSystem("helloworld")implicit val executor: ExecutionContext = system.dispatcherimplicit val materializer: ActorMaterializer = ActorMaterializer()
Annak ellenére, hogy nem kell tudnia, mit csinálnak az Akka HTTP alkalmazások fejlesztésének megkezdéséhez, mindig jó tisztában lenni azzal, hogy mire valók.
A ActorSystem
színészek irányítására használják. Ezek létrehozására és felkutatására használják. Az ugyanazon rendszer szereplői általában ugyanazt a konfigurációt használják.
A ExecutionContext
felelős az Future
s végrehajtásáért . Tudja, hogy hol és hogyan kell végrehajtani őket, például egy szálkészletben.
És végül egy ActorMaterializer
folyó felelős a folyamfolyamokért.
Ezzel elkészíthetjük a hello útvonalunkat!
Készítse el az útvonalat
Útvonalunk elkészítéséhez az Akka HTTP útválasztási DSL-jét fogjuk használni. Az irányelvnek nevezett „rétegeken” alapul. Áttekintésként böngésszen a hivatalos dokumentumaik között.
Adja hozzá az útvonalat a függőségek alá:
def route = path("hello") { get { complete("Hello, World!") }}
Van egy első rétegünk, ahol megpróbáljuk a bejövő kérés elérési útját "/ hello" -nak egyeztetni. Ha nem egyezik, akkor elutasításra kerül.
Ha megfelel, akkor megpróbálja összehangolni a belső „irányelveket”. Esetünkben egyeztetjük a GET kéréseket. A kérés / válasz ciklust egy „Hello, World” üzenettel fejezzük be.
Indítsa el a szervert
Létrehozott útvonalunkkal csak a szervert kell elindítanunk:
Http().bindAndHandle(route, host, port)
Az Akka HTTP Http
objektummal kötjük az útvonalunkat az adott gazdagéphez és porthoz .
Az Server
objektumunk futtatásához kattintson rá a jobb gombbal, és kattintson a "Szerver" futtatására .
Adjon pár másodpercet a fordításhoz, majd lépjen a böngészőhöz. Navigáljon ide, //localhost:9000/hello
és látnia kell a „Hello, World!” Oldalunkat üzenet.

Hűvös, nem?
Fakitermelés
Az oktatóanyag felvétele előtt hozzáadjuk az alapnaplózást a szerverünkhöz.
Lehet, hogy észrevette, hogy nem érkezett visszajelzés, amikor lefuttattuk az Server
objektumunkat. Fogalmunk sincs, hogy sikerült-e vagy sem.
Csak feltételezhetjük, hogy működött, mert az alkalmazás nem összeomlott.
Adjunk hozzá néhány naplózást.
If you look into the bindAndHandle
function from the Http
object, it returns a future of ServerBinding
. We can hook some logs into the future’s onComplete
function.
Let’s do that:
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}")}
Run the Server
again, and this time you should see:
listening to /0:0:0:0:0:0:0:0:9000
Wrapping up
While using Scala and Akka HTTP is not the fastest way to develop APIs, it allows you to integrate other Akka modules, such as actors, streams, clusters, and more, making it easier to develop resilient and scalable systems.
Having said that, it’s good to keep in mind that developing an application using Scala and/or Akka doesn’t necessarily mean that it will be resilient and scalable. You’ll still need to perform work to accomplish that, but it’s easier than with other technologies.
If you liked Akka HTTP, we’ve got a free course that’ll quickstart your way into developing APIs with it. You’ll build an API for a Todo application, explained step by step. Check it out! ??
Akka HTTP Quickstart
Learn how to create web applications and APIs with Akka HTTP in this free course!link.codemunity.io