Use-case and Deployment Scenarios
How can I use and deploy Akka?
Akka can be used in different ways:
- As a library: used as a regular JAR on the classpath and/or in a web app, to be put into WEB-INF/lib
- Package with sbt-native-packager
- Package and deploy using Lightbend ConductR.
Native Packager
sbt-native-packager is a tool for creating distributions of any type of application, including an Akka applications.
Define sbt version in project/build.properties file:
sbt.version=0.13.7
Add sbt-native-packager in project/plugins.sbt file:
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.0-RC1")
Use the package settings and optionally specify the mainClass in build.sbt file:
import NativePackagerHelper._
name := "akka-sample-main-scala"
version := "2.4.20"
scalaVersion := "2.11.8"
libraryDependencies ++= Seq(
"com.typesafe.akka" %% "akka-actor" % "2.4.20"
)
enablePlugins(JavaServerAppPackaging)
mainClass in Compile := Some("sample.hello.Main")
mappings in Universal ++= {
// optional example illustrating how to copy additional directory
directory("scripts") ++
// copy configuration files to config directory
contentOf("src/main/resources").toMap.mapValues("config/" + _)
}
// add 'config' directory first in the classpath of the start script,
// an alternative is to set the config file locations via CLI parameters
// when starting the application
scriptClasspath := Seq("../config/") ++ scriptClasspath.value
licenses := Seq(("CC0", url("http://creativecommons.org/publicdomain/zero/1.0")))
Note
Use the JavaServerAppPackaging. Don't use the deprecated AkkaAppPackaging (previously named packageArchetype.akka_application), since it doesn't have the same flexibility and quality as the JavaServerAppPackaging.
Use sbt task dist package the application.
To start the application (on a unix-based system):
cd target/universal/
unzip akka-sample-main-scala-2.4.20.zip
chmod u+x akka-sample-main-scala-2.4.20/bin/akka-sample-main-scala
akka-sample-main-scala-2.4.20/bin/akka-sample-main-scala sample.hello.Main
Use Ctrl-C to interrupt and exit the application.
On a Windows machine you can also use the bin\akka-sample-main-scala.bat script.
In a Docker container
You can use both Akka remoting and Akka Cluster inside of Docker containers. But note that you will need to take special care with the network configuration when using Docker, described here: Akka behind NAT or in a Docker container
For an example of how to set up a project using Akka Cluster and Docker take a look at the "akka-docker-cluster" activator template.
Contents