Volver a la página principal
lunes 14 octubre 2024
6

Cómo usar Akka en Scala

Akka es un toolkit que facilita la creación de aplicaciones distribuidas y concurrentes utilizando el modelo de actores, donde cada "actor" es una entidad pequeña que tiene su propio estado y comportamiento, y se comunica con otros actores mediante el paso de mensajes. Este enfoque es ideal para manejar sistemas altamente escalables y tolerantes a fallos.

Los actores en Akka son independientes y aislados, lo que significa que no comparten estado y, por lo tanto, evitan problemas relacionados con el acceso concurrente a datos.

Ejemplo básico de Akka en Scala

Configuración básica

Para empezar a usar Akka, necesitas incluir la dependencia en tu proyecto. Si estás usando SBT, añade la siguiente línea a tu archivo build.sbt:

libraryDependencies += "com.typesafe.akka" %% "akka-actor-typed" % "2.6.20"

Crear un actor

En Akka, se definen actores como clases que extienden AbstractBehavior. Aquí tienes un ejemplo de un actor simple que responde a un mensaje de saludo.

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

// Definir el protocolo de mensajes que el actor acepta
object Saludador {
  final case class Saludo(nombre: String, respondTo: ActorRef[Respuesta])
  final case class Respuesta(mensaje: String)

  def apply(): Behavior[Saludo] = Behaviors.receive { (context, message) =>
    val saludo = s"Hola, ${message.nombre}!"
    message.respondTo ! Respuesta(saludo)
    Behaviors.same
  }
}

Crear el sistema de actores y enviar mensajes

Para interactuar con el actor, necesitas crear un sistema de actores y un actor supervisor.

import akka.actor.typed.ActorSystem

object SistemaSaludador extends App {
  val sistema: ActorSystem[Saludador.Saludo] = ActorSystem(Saludador(), "SistemaDeSaludo")

  val respuestaActor = sistema.systemActorOf(Behaviors.receiveMessage[Saludador.Respuesta] { message =>
    println(message.mensaje)
    Behaviors.same
  }, "RespuestaActor")

  sistema ! Saludador.Saludo("Scala", respuestaActor)
}

En este ejemplo, se crea un actor Saludador que responde con un mensaje personalizado y se envía un mensaje para saludar a "Scala". El resultado se imprime en la consola.

Ejemplos comunes de Akka en Scala

Trabajar con múltiples actores

Akka permite que varios actores trabajen juntos en un sistema distribuido. Los actores pueden comunicarse entre ellos enviándose mensajes.

object Coordinador {
  final case class Tarea(mensaje: String, respondTo: ActorRef[Resultado])
  final case class Resultado(respuesta: String)

  def apply(): Behavior[Tarea] = Behaviors.receive { (context, message) =>
    context.log.info("Procesando tarea: " + message.mensaje)
    message.respondTo ! Resultado("Tarea completada: " + message.mensaje)
    Behaviors.same
  }
}

Los actores pueden distribuir tareas y coordinarse para manejar cargas de trabajo grandes o paralelizar operaciones.

Escalabilidad y resiliencia

Akka también incluye características como el balanceo de carga y la supervisión, donde los actores supervisores pueden reiniciar o detener actores fallidos, asegurando que el sistema sea robusto ante errores.

Referencia oficial

Para más información sobre Akka y cómo usarlo en Scala, consulta la documentación oficial de Akka.

Etiquetas:
scala
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer