Implementing Akka Clusters and Sharding in Lagom
Classified in Computers
Written on in
with a size of 2.4 KB
Akka Clusters and Sharding with Lagom
This configuration demonstrates how to set up Akka Clusters and Sharding within a Lagom microservices project using Scala.
SBT Configuration
organization in ThisBuild := "com.example"
version in ThisBuild := "1.0-SNAPSHOT"
scalaVersion in ThisBuild := "2.11.8"
val macwire = "com.softwaremill.macwire" %% "macros" % "2.2.5" % "provided"
val scalaTest = "org.scalatest" %% "scalatest" % "3.0.1" % Test
lazy val `lagom-persistent-entity-demo` = (project in file("."))
.aggregate(`user-api`, `user-impl`)
lazy val `user-api` = (project in file("user-api"))
.settings(
libraryDependencies ++= Seq(
lagomScaladslApi
)
)
lazy val `user-impl` = (project in file("user-impl"))
.enablePlugins(LagomScala)
.settings(
libraryDependencies ++= Seq(
lagomScaladslPersistenceCassandra,
lagomScaladslTestKit,
macwire,
scalaTest
)
)
.settings(lagomForkedTestSettings: _*)
.dependsOn(`user-api`)
lagomCassandraEnabled in ThisBuild := false
lagomUnmanagedServices in ThisBuild := Map("cas_native" -> "http://localhost:9042")User Model API
package com.knoldus.user.api
import play.api.libs.json.{Format, Json}
case class User(id: String, name: String, age: Int)
object User {
implicit val format: Format[User] = Json.format
}User Service Descriptor
package com.knoldus.user.api
import akka.NotUsed
import com.lightbend.lagom.scaladsl.api.transport.Method
import com.lightbend.lagom.scaladsl.api.{Descriptor, Service, ServiceCall}
trait UserService extends Service {
def createUser(id: String, name: String, age: Int): ServiceCall[NotUsed, String]
def getUserById(id: String): ServiceCall[NotUsed, String]
def getUserByName(name: String): ServiceCall[NotUsed, String]
def getUserByNameAndAge(name: String, age: Int): ServiceCall[NotUsed, String]
override def descriptor: Descriptor = {
import Service._
named("user_service")
.withCalls(
restCall(Method.POST, "/user/create/:id/:name/:age", createUser _),
restCall(Method.GET, "/user/details/id/:id", getUserById _),
restCall(Method.GET, "/user/details/name/:name", getUserByName _),
restCall(Method.GET, "/user/detailsByNameAndAge/name/:name/age/:age", getUserByNameAndAge _)
).withAutoAcl(true)
}
}