一般来说,scala程序可以用sbt也可以用maven,我觉得既然我习惯用maven那就用maven吧,下面用IDEA+MAVEN新建第一个AKKA程序。
一、新建一个maven+scala的项目






二、maven依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.suibibk.scala</groupId><artifactId>akka</artifactId><version>1.0-SNAPSHOT</version><!-- 定义一下常量 --><properties><encoding>UTF-8</encoding><scala.version>2.13.1</scala.version><scala.compat.version>2.13</scala.compat.version><akka.version>2.6.1</akka.version></properties><dependencies><!-- 添加scala的依赖 --><dependency><groupId>org.scala-lang</groupId><artifactId>scala-library</artifactId><version>${scala.version}</version></dependency><!-- 添加akka的actor依赖 --><dependency><groupId>com.typesafe.akka</groupId><artifactId>akka-actor_${scala.compat.version}</artifactId><version>${akka.version}</version></dependency><!-- 多进程之间的Actor通信 --><dependency><groupId>com.typesafe.akka</groupId><artifactId>akka-remote_${scala.compat.version}</artifactId><version>${akka.version}</version></dependency></dependencies><!-- 指定插件--><build><!-- 指定源码包和测试包的位置 --><sourceDirectory>src/main/scala</sourceDirectory><testSourceDirectory>src/test/scala</testSourceDirectory><plugins><!-- 指定编译scala的插件 --><plugin><groupId>net.alchim31.maven</groupId><artifactId>scala-maven-plugin</artifactId><version>3.2.2</version><executions><execution><goals><goal>compile</goal><goal>testCompile</goal></goals><configuration><args><arg>-dependencyfile</arg><arg>${project.build.directory}/.scala_dependencies</arg></args></configuration></execution></executions></plugin></plugins></build></project>
版本怎么确定呢?
如果你的版本跟安装的scala环境对不上,运行时候会报错的,所以scala和akka的版本要对应上,可以去maven仓库找:


三、HelloAkka
package com.suibibkimport akka.actor.{Actor, ActorSystem, Props}import scala.io.StdInclass HelloAkka extends Actor{override def receive: Receive = {case "狗子" =>println("狗子什么的,我当然最喜欢啦")case "猫猫" =>println("猫猫可是比妹子可爱一万倍的存在")case "stop" =>{context.stop(self) // 停止自己的actorRefcontext.system.terminate()//关闭ActorSystem,即关闭其内部的线程池(ExcutorService)}case _ =>println("不知道你说的是什么鬼")}}object HelloAkka{/*** 创建线程对象MyFactory,用来创建actor对象的* 里面的"myFactory"参数为线程池的名称*/private val myFactory = ActorSystem("myFactory")/*** 通过myFactory.actorOf方法來创建一个actor,注意,Props方法的第一个参数需要传递我们自定义的HelloActor* 第二个参数是actor起个名字*/private val helloActorRef = myFactory.actorOf(Props[HelloAkka],"helloActor")def main(args:Array[String]):Unit={var flag = truewhile(flag){/*** 接受用户输入的字符串*/print("请输入您想发送的消息:")val consoleLine:String = StdIn.readLine()/*** 使用helloActorRef来给自己发送消息,helloActorRef有一个叫做感叹号("!")的方法来发送消息*/helloActorRef ! consoleLineif(consoleLine.equals("stop")){flag=falseprintln("程序即将结束!")}/*** 为了不让while的运行速度在receive方法之上,我们可以让他休息0.1秒*/Thread.sleep(100)}}}
运行结果如下:

