个人随笔
目录
Scala学习之路 (十五)Akka-用IDEA+MAVEN构建第一个AKKA程序
2019-12-24 23:42:40

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

一、新建一个maven+scala的项目






二、maven依赖

  1. <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">
  2. <modelVersion>4.0.0</modelVersion>
  3. <groupId>com.suibibk.scala</groupId>
  4. <artifactId>akka</artifactId>
  5. <version>1.0-SNAPSHOT</version>
  6. <!-- 定义一下常量 -->
  7. <properties>
  8. <encoding>UTF-8</encoding>
  9. <scala.version>2.13.1</scala.version>
  10. <scala.compat.version>2.13</scala.compat.version>
  11. <akka.version>2.6.1</akka.version>
  12. </properties>
  13. <dependencies>
  14. <!-- 添加scala的依赖 -->
  15. <dependency>
  16. <groupId>org.scala-lang</groupId>
  17. <artifactId>scala-library</artifactId>
  18. <version>${scala.version}</version>
  19. </dependency>
  20. <!-- 添加akka的actor依赖 -->
  21. <dependency>
  22. <groupId>com.typesafe.akka</groupId>
  23. <artifactId>akka-actor_${scala.compat.version}</artifactId>
  24. <version>${akka.version}</version>
  25. </dependency>
  26. <!-- 多进程之间的Actor通信 -->
  27. <dependency>
  28. <groupId>com.typesafe.akka</groupId>
  29. <artifactId>akka-remote_${scala.compat.version}</artifactId>
  30. <version>${akka.version}</version>
  31. </dependency>
  32. </dependencies>
  33. <!-- 指定插件-->
  34. <build>
  35. <!-- 指定源码包和测试包的位置 -->
  36. <sourceDirectory>src/main/scala</sourceDirectory>
  37. <testSourceDirectory>src/test/scala</testSourceDirectory>
  38. <plugins>
  39. <!-- 指定编译scala的插件 -->
  40. <plugin>
  41. <groupId>net.alchim31.maven</groupId>
  42. <artifactId>scala-maven-plugin</artifactId>
  43. <version>3.2.2</version>
  44. <executions>
  45. <execution>
  46. <goals>
  47. <goal>compile</goal>
  48. <goal>testCompile</goal>
  49. </goals>
  50. <configuration>
  51. <args>
  52. <arg>-dependencyfile</arg>
  53. <arg>${project.build.directory}/.scala_dependencies</arg>
  54. </args>
  55. </configuration>
  56. </execution>
  57. </executions>
  58. </plugin>
  59. </plugins>
  60. </build>
  61. </project>

版本怎么确定呢?

如果你的版本跟安装的scala环境对不上,运行时候会报错的,所以scala和akka的版本要对应上,可以去maven仓库找:


三、HelloAkka

  1. package com.suibibk
  2. import akka.actor.{Actor, ActorSystem, Props}
  3. import scala.io.StdIn
  4. class HelloAkka extends Actor{
  5. override def receive: Receive = {
  6. case "狗子" =>println("狗子什么的,我当然最喜欢啦")
  7. case "猫猫" =>println("猫猫可是比妹子可爱一万倍的存在")
  8. case "stop" =>{
  9. context.stop(self) // 停止自己的actorRef
  10. context.system.terminate()//关闭ActorSystem,即关闭其内部的线程池(ExcutorService)
  11. }
  12. case _ =>println("不知道你说的是什么鬼")
  13. }
  14. }
  15. object HelloAkka{
  16. /**
  17. * 创建线程对象MyFactory,用来创建actor对象的
  18. * 里面的"myFactory"参数为线程池的名称
  19. */
  20. private val myFactory = ActorSystem("myFactory")
  21. /**
  22. * 通过myFactory.actorOf方法來创建一个actor,注意,Props方法的第一个参数需要传递我们自定义的HelloActor
  23. * 第二个参数是actor起个名字
  24. */
  25. private val helloActorRef = myFactory.actorOf(Props[HelloAkka],"helloActor")
  26. def main(args:Array[String]):Unit={
  27. var flag = true
  28. while(flag){
  29. /**
  30. * 接受用户输入的字符串
  31. */
  32. print("请输入您想发送的消息:")
  33. val consoleLine:String = StdIn.readLine()
  34. /**
  35. * 使用helloActorRef来给自己发送消息,helloActorRef有一个叫做感叹号("!")的方法来发送消息
  36. */
  37. helloActorRef ! consoleLine
  38. if(consoleLine.equals("stop")){
  39. flag=false
  40. println("程序即将结束!")
  41. }
  42. /**
  43. * 为了不让while的运行速度在receive方法之上,我们可以让他休息0.1秒
  44. */
  45. Thread.sleep(100)
  46. }
  47. }
  48. }

运行结果如下:

 1357

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2