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()
      }
    }

     

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

  • 相关阅读:
    PMP(第六版)十大知识领域、五大项目管理过程组、49个过程矩阵
    快速开发平台分享-UCML快速开发七种武器
    敏捷开发干货-快速开发平台的主题行为模型介绍
    MACHINE LEARNING
    What is “Neural Network”
    VS打开项目或解决方案卡死,一直处于未响应状态。
    Sql Server 本地(客户端)连接服务器端操作
    阿里云服务器,Sql Server 本地连接服务器端问题记录
    <%@ Register TagPrefix="uc1" TagName="user" Src="../Control/user.ascx" %>什么意思?
    IIS网站部署后,程序常见错误记录
  • 原文地址:https://www.cnblogs.com/bee-home/p/8658108.html
Copyright © 2011-2022 走看看