zoukankan      html  css  js  c++  java
  • day29akka

    PS:AKKA
    之前要实现并发编程,通常要借用netty框架,现在如果又要高并发又要分布式就使用akka框架
    这个akka在客户端和服务端每一端都相当于一个actor,尤其是服务端需要一个总管进行管理

    PS: RPC
    不同进程之间的的方法调用

    -----------------------------实现项目

    1.创建Maven项目

    PS:通常编译好的话,使用插件的package命令导包,放大linux执行。

     

    PS : Master

    import akka.actor.{Actor, ActorSystem, Props}
    import com.typesafe.config.ConfigFactory
    
    import scala.collection.mutable
    import scala.concurrent.duration._
    
    class Master extends Actor{
    
      println("constructor invoked")
    
      override def preStart(): Unit = {
        println("prStart invoked")
      }
    
      //用于接收消息
      override def receive: Receive = {
        case "connect" =>{
          println("a client invoked")
          sender ! "reply"
        }
        case "hello" =>{
          println("hello")
        }
      }
    }
    
    
    object Master{
      def main(args: Array[String]){
        val host = "192.168.93.217"
        val port = 8888
        // 准备配置
        val configStr =
          s"""
             |akka.actor.provider = "akka.remote.RemoteActorRefProvider"
             |akka.remote.netty.tcp.hostname = "$host"
             |akka.remote.netty.tcp.port = "$port"
           """.stripMargin
        val config = ConfigFactory.parseString(configStr)
        //ActorSystem老大,辅助创建和监控下面的Actor,他是单例的
        val actorSystem = ActorSystem("MasterSystem", config)
        //创建Actor
        val master = actorSystem.actorOf(Props(new Master), "Master")
        master !"hello"
        actorSystem.awaitTermination()
      }
    }

    PS:Worker

    import akka.actor.Actor
    import java.util.UUID
    
    import akka.actor.{Actor, ActorSelection, ActorSystem, Props}
    import com.typesafe.config.ConfigFactory
    import scala.concurrent.duration._
    class Worker extends Actor{
      var master : ActorSelection = _
      //建立连接
      override def preStart(): Unit = {
        //println("prStart invoked")
        //跟Master建立连接
        master = context.actorSelection(s"akka.tcp://MasterSystem@192.168.93.217:8888/user/Master")
        //向Master发送注册消息
        master ! "connect"
      }
    
      //用于接收消息
      override def receive: Receive = {
        case "reply" =>{
          println("a reply from master")
        }
        /*case "hello" =>{
          println("hello")
        }*/
      }
    }
    
    object Worker{
      def main(args: Array[String]){
        val host = "192.168.93.217"
        val port = 9999  //端口要修改
        // 准备配置
        val configStr =
          s"""
             |akka.actor.provider = "akka.remote.RemoteActorRefProvider"
             |akka.remote.netty.tcp.hostname = "$host"
             |akka.remote.netty.tcp.port = "$port"
           """.stripMargin
        val config = ConfigFactory.parseString(configStr)
        //ActorSystem老大,辅助创建和监控下面的Actor,他是单例的
        val actorSystem = ActorSystem("WorkerSystem", config)
        //创建Actor
        actorSystem.actorOf(Props[Worker], "Worker")
        actorSystem.awaitTermination()
      }
    }

     

     ------------------------------------------------------------------------下午没学

  • 相关阅读:
    Django之cookie与session
    Django之在Python中调用Django环境
    Django之Django终端打印SQL语句
    Django之事务
    Django之ORM操作(聚合 分组、F Q)
    Linux常用服务安装部署
    Linux服务基础命令
    程序员的vim
    Linux的xshell命令
    Linux操作服务器的初识
  • 原文地址:https://www.cnblogs.com/bee-home/p/8658108.html
Copyright © 2011-2022 走看看