Akkaの3つのアプリケーションシナリオ

  AKKAとは?
Akkaは、高度な同時分散型のフォールトトレラントなイベント駆動型JVMベースのアプリケーションを構築するために使用できる開発ライブラリおよびランタイム環境です。高度な並行分散アプリケーションの構築を容易にします。Akkaはアクターモデルモデルをカプセル化します。これは、非同期のノンブロッキングメッセージ配信として理解できます。

最初のタイプ:文字列または単一の値をAKKAに送信します

package day03

import scala.actors.Actor


/**
  * Created by Administrator on 2017/9/18.
  * 功能:演示AKK  1 继承Actor类 2 重写act方法
  *      功能点:演示发送一个字符串
  */
// 1 继承actor类
class ActorDemo extends Actor{
  // 2 重写act方法,一般有while true操作
override  def act =
{
  while(true)
    {
      // 3 在receive中写具体的操作,要用到case 判断
      receive{
        case name:String=>println("hello, "+name)
        case money:Int=>println("how much "+money)

      }
    }
}
}


object ActorDemon01 {

  def main(args: Array[String]): Unit = {

    val helloActor=new ActorDemo  // 1 创建一个继承actor的对象
    helloActor.start()  // 2 启动akka
    helloActor ! "tom"  // 3 依据具体的参数调用actor
    helloActor ! 1000

  }

}

プログラムをアイデアで実行すると、実行中のスクリーンショットは次のようになります。

これは比較的単純です。つまり、文字と値が別々に送信され、理解することができます

2番目のタイプ:サンプルクラスをakkaに送信します

package day03

import scala.actors.Actor

/**
  * Created by Administrator on 2017/9/18.
  * 功能:演示akka的发送样例类
  *
  */
//几个样例类
case class Register(username:String,password:String)
case class Login(username:String,password:String)

// 1 继承Actor类
class ActorDemon02 extends Actor{
  //2 重写act方法
  override  def act()
  {
   while(true)
     {
       //3 在receive中写相关的操作
       receive{
         case Login(username,password)=>println("Login "+username+" 密码 "+password)
         case Register(username,password)=>println("Register "+username+" 密码 "+password)

       }
     }
  }
}



object ActorDemon02 {
  def main(args: Array[String]): Unit = {
    val actorDemon02=new ActorDemon02 //4 创建akka对象
    actorDemon02.start()  // 4 启动akka

    actorDemon02 ! Register("zhangsan","123")  //调用akka
    actorDemon02 ! Login("lisi","456")


  }


}

プログラムをアイデアで実行すると、プログラムのスクリーンショットは次のようになります。

説明:これは、最初のシナリオと同様に、akkaに送信されるサンプルクラスです。

总结点: 一 Akka的开发流程
1 继承actor类 : extends Actor
2 重写act方法: override  def act 一般有while true操作
3 在receive中写具体的操作,receive{ ,要用到case 判断 

总结点:二 Actor的调用流程:
1 创建一个继承actor的对象: val helloActor=new ActorDemo
2 启动akka:    helloActor.start() 
3 依据具体的参数调用actor:    helloActor ! "tom"

3番目のタイプ:akka間の相互呼び出し

package day03

import scala.actors.Actor

/**
  * Created by Administrator on 2017/9/18.
  * 功能:演示akka akka之间发送数据
  *
  */
case class Message(content:String,sender:Actor)

class zxcActor extends Actor
{
 override def act: Unit =
  {
    while(true)
      {
        receive{
          case Message(content,sender)=>println("zxc received "+content)
          sender ! "北京欢迎你"
          sender ! 1000
        }
      }
  }
}

class chongActor(val zxc:zxcActor) extends Actor
{
  override def act: Unit =
  {
    //this 代表调用的对象 指的是 chongActor
    zxc ! Message("hello i am chong",this)
    while(true)
      {
        receive{
          case response:String=>println("chong received "+response)
          case response:Int=>println("how much "+response)
        }
      }
  }
}


object ActorDemon03 {
  def main(args: Array[String]): Unit = {
    val zxc=new zxcActor
    val  chong=new chongActor(zxc)
    zxc.start()
    chong.start()



  }
}

プログラムをアイデアで実行すると、プログラム操作のスクリーンショットは次のようになります。

 

 Akka間の呼び出しの要約ポイント:
1 2番目のアクターのパラメーターは最初のアクターへの参照を持っている必要があります
chongActor(val zxc:zxcActor)
2次のアクターが呼び出されると、それはact関数に配置され、receive
override defactの外側に配置されます。 :Unit =
{//これは、呼び出し元のオブジェクトがchongActor
zxcを参照することを表します!Message( "hello i am chong"、this)
説明:1受信で独自の操作を実装するため、受信の外部に配置されます
       2これを使用して電話をかけるときの発信者、これはより便利です

 

おすすめ

転載: blog.csdn.net/zhaoxiangchong/article/details/82252336