Akka és un conjunt d'eines per construir aplicacions altament concurrents, distribuïdes i tolerants a fallades en la JVM (Java Virtual Machine). Akka proporciona un model d'actors que facilita la gestió de la concurrència i la distribució, permetent als desenvolupadors escriure codi més senzill i mantenible.

Objectius del Tema

  • Entendre què és Akka i per què és útil.
  • Aprendre els conceptes bàsics del model d'actors.
  • Configurar un projecte bàsic amb Akka.
  • Crear i gestionar actors en Scala.
  • Enviar i rebre missatges entre actors.

Conceptes Clau

Què és Akka?

Akka és una biblioteca per a la construcció d'aplicacions concurrentes, distribuïdes i tolerants a fallades. Utilitza el model d'actors per gestionar la concurrència, on cada actor és una unitat independent de computació que pot enviar i rebre missatges.

Per què utilitzar Akka?

  • Concurrència: Simplifica la gestió de la concurrència evitant l'ús de fils i bloquejos.
  • Escalabilitat: Facilita la creació d'aplicacions que poden escalar horitzontalment.
  • Tolerància a fallades: Proporciona mecanismes per gestionar errors i fallades de manera robusta.

Model d'Actors

  • Actors: Són unitats de computació que processen missatges de manera asincrònica.
  • Missatges: Són unitats de comunicació entre actors.
  • Sistema d'Actors: És el contenidor que gestiona la creació i supervisió dels actors.

Configuració del Projecte

Configuració de l'Entorn

Per començar a utilitzar Akka, necessitem configurar el nostre projecte Scala amb les dependències necessàries.

build.sbt

name := "AkkaIntroduction"

version := "0.1"

scalaVersion := "2.13.6"

libraryDependencies ++= Seq(
  "com.typesafe.akka" %% "akka-actor-typed" % "2.6.16",
  "com.typesafe.akka" %% "akka-stream" % "2.6.16"
)

Creació del Sistema d'Actors

Exemple Bàsic d'Actor

A continuació, crearem un actor senzill que rebi i processi missatges.

import akka.actor.typed.{ActorSystem, Behavior}
import akka.actor.typed.scaladsl.Behaviors

object HelloWorldActor {
  final case class Greet(whom: String)

  def apply(): Behavior[Greet] = Behaviors.receive { (context, message) =>
    context.log.info("Hello {}!", message.whom)
    Behaviors.same
  }
}

object AkkaQuickstart extends App {
  val system: ActorSystem[HelloWorldActor.Greet] = ActorSystem(HelloWorldActor(), "helloAkka")

  system ! HelloWorldActor.Greet("Scala")
}

Explicació del Codi

  • Definició de l'Actor: HelloWorldActor és un objecte que defineix un actor amb un comportament (Behavior) que processa missatges de tipus Greet.
  • Missatge: Greet és un cas de classe que representa el missatge que l'actor pot rebre.
  • Comportament de l'Actor: Behaviors.receive defineix com l'actor processa els missatges. En aquest cas, simplement imprimeix un missatge de salutació.
  • Sistema d'Actors: ActorSystem és el contenidor que gestiona l'actor. En aquest exemple, creem un sistema d'actors anomenat helloAkka i li enviem un missatge Greet.

Exercicis Pràctics

Exercici 1: Crear un Actor de Salutació

Crea un actor que rebi un missatge amb un nom i respongui amb un missatge de salutació.

Solució

import akka.actor.typed.{ActorSystem, Behavior}
import akka.actor.typed.scaladsl.Behaviors

object Greeter {
  final case class Greet(whom: String, replyTo: akka.actor.typed.ActorRef[Greeting])
  final case class Greeting(message: String)

  def apply(): Behavior[Greet] = Behaviors.receive { (context, message) =>
    val greeting = s"Hello, ${message.whom}!"
    message.replyTo ! Greeting(greeting)
    Behaviors.same
  }
}

object GreeterMain extends App {
  val system: ActorSystem[Greeter.Greet] = ActorSystem(Greeter(), "greeterSystem")

  val replyTo = system.systemActorOf(Behaviors.receiveMessage[Greeter.Greeting] { message =>
    println(message.message)
    Behaviors.same
  }, "replyActor")

  system ! Greeter.Greet("Scala", replyTo)
}

Explicació del Codi

  • Actor de Salutació: Greeter és un actor que rep un missatge Greet amb un nom i un actor de resposta (replyTo).
  • Missatge de Salutació: Greeting és un cas de classe que representa la resposta de salutació.
  • Resposta: L'actor Greeter envia un missatge de salutació a l'actor de resposta (replyTo).

Resum

En aquesta secció, hem introduït Akka i el model d'actors, hem configurat un projecte bàsic amb Akka i hem creat actors que poden enviar i rebre missatges. Akka facilita la construcció d'aplicacions concurrentes i distribuïdes, proporcionant un model d'actors que simplifica la gestió de la concurrència i la comunicació entre components.

En el següent tema, explorarem conceptes més avançats d'Akka, com la supervisió d'actors i la gestió d'errors.

© Copyright 2024. Tots els drets reservats