zoukankan      html  css  js  c++  java
  • Akka 入门

      <!-- 定义一下常量 -->
        <properties>
            <encoding>UTF-8</encoding>
            <scala.version>2.11.8</scala.version>
            <scala.compat.version>2.11</scala.compat.version>
            <akka.version>2.4.17</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>
    View Code

    依赖:

    <?xml version="1.0" encoding="UTF-8"?>
    <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/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>Seascala</artifactId>
            <groupId>com.sea</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>AkkaDemo</artifactId>
    
    
        <dependencies>
            <!--scala -->
            <!-- https://mvnrepository.com/artifact/org.scala-lang/scala-library -->
            <dependency>
                <groupId>org.scala-lang</groupId>
                <artifactId>scala-library</artifactId>
                <version>2.13.1</version>
            </dependency>
            <!-- 配置akka actor 依赖-->
            <dependency>
                <groupId>com.typesafe.akka</groupId>
                <artifactId>akka-actor_2.13</artifactId>
                <version>2.6.3</version>
            </dependency>
            <!-- 多进程之间的通信akka actor 依赖-->
            <dependency>
                <groupId>com.typesafe.akka</groupId>
                <artifactId>akka-remote_2.13</artifactId>
                <version>2.6.3</version>
            </dependency>
        </dependencies>
        <build>
            <!--指定源码位置-->
            <sourceDirectory>src/main/scala</sourceDirectory>
            <testSourceDirectory>src/test/scala</testSourceDirectory>
        </build>
    
    
    </project>

    Demo:

    package com.sea.f01
    
    import akka.actor.{Actor, ActorRef, ActorSystem, Props}
    
    class SayHelloActor extends Actor {
      override def receive: Receive = {
    
        case "hello" => println("您好!")
        case "xf" => println("xf  hahhahah!")
        case _ => println("您是?")
    
      }
    }
    
    
    object SayHelloActorDemo {
      //创建一个ActorSystem  ,专门用于创建actor
      private val actoryFactory = ActorSystem("actoryFactory")
     //创建一个Actor的同时,返回一个actor 的引用actorref
      //说明:
    //Props[SayHelloActor]  使用反射创建了一个SayHelloActor 实例
    //  "sayHelloActor" 给 actor 取名
    //  sayHelloActorActorRef 就是 Props[SayHelloActor]  的ActorRef
      private val sayHelloActorRef: ActorRef = actoryFactory.actorOf(Props[SayHelloActor], "sayHelloActor")
    
    
    
      //test
      def main(args: Array[String]): Unit = {
        //给SayHelloActor 发消息
        sayHelloActorRef ! "xf"
        print("over")
      }
    
    
    }

     Demo2

    import akka.actor.{Actor, ActorRef, ActorSystem, Props}
    
    class Aactor(actorRef:ActorRef)  extends  Actor{
      override def receive: Receive = {
        case "start" =>{
              println("Aactior start ")
          actorRef ! "我打"
        }
        case "我打" =>{
           .sleep(1000)
          println("Aactior  我也被打了 我要开始反击了 XXX")
          sender() ! "我打"
        }
    
      }
    }
    
    
    class Bactor extends  Actor {
      override def receive: Receive ={
    
        case "我打"=>{
          Thread.sleep(1000)
          println("Bactior 被打了 , 要开始反击了 jj")
           sender() ! "我打"
        }
    
      }
    }
    
    
    
    
    
    
    object  testABActor {
       val actorFacory: ActorSystem = ActorSystem("actorFacory")
       val bactorRef: ActorRef = actorFacory.actorOf(Props[Bactor], "bactor")
       val actorRef: ActorRef = actorFacory.actorOf(Props(new Aactor(bactorRef)), "actor")
    
      def main(args: Array[String]): Unit = {
        actorRef ! "start"
      }
    }
  • 相关阅读:
    杭电 1596 find the safest road (最短路)
    回溯法——求解N皇后问题
    iptables apache2
    POJ 2586 Y2K Accounting Bug(枚举大水题)
    JAVA学习第十九课(java程序的异常处理 (二))
    XHTML中button加入超链接以及使插入图片与屏幕一样大
    每天一个JavaScript实例-apply和call的使用方法
    【HDU 5384】Danganronpa(AC自己主动机)
    小心APP应用让你成为“透明人”
    第一讲:使用html5——canvas绘制奥运五环
  • 原文地址:https://www.cnblogs.com/lshan/p/12587104.html
Copyright © 2011-2022 走看看