akka demo
来源:互联网 发布:three.js 阴影 锯齿 编辑:程序博客网 时间:2024/06/08 09:16
最近在使用akka,写了一个基于akka的分布式求累加和的例子,思路很简单,在本地机器上把求和的任务均匀分配给不同步的节点去计算,并且把计算结果返回到本地机器,然后在本地进行再次进行合并,得到最终结果.
本地Actor : Master
package com.ycimport akka.actor.{Actor, ActorLogging}import akka.util.Timeoutimport scala.collection.mutable.ArrayBufferimport scala.concurrent.{Await, Future}import scala.concurrent.duration._import akka.pattern.ask/** * Created by yc */class MasterActor extends Actor with ActorLogging{ val worker1 = context.actorSelection("akka.tcp://Worker1@182.254.211.164:2553/user/worker1") //val worker2 = context.actorSelection("akka.tcp://Worker2@10.175.37.91:2554/user/worker2") // val worker3 = context.actorSelection("akka.tcp://Worker3@10.175.37.91:2555/user/worker3") //val worker4 = context.actorSelection("akka.tcp://Worker4@10.175.37.91:2556/user/worker4") val futureResult = new ArrayBuffer[Future[BigInt]]() val start = System.nanoTime() implicit val timeout = Timeout(100 seconds) var res:BigInt = 0 override def receive={ case message:String=>{ futureResult += (worker1?"1,1000000000").mapTo[BigInt] //futureResult += (worker2?"500000001,1000000000").mapTo[BigInt] // futureResult += (worker3?"500000001,750000000").mapTo[BigInt] //futureResult += (worker4?"750000001,1000000000").mapTo[BigInt] //futureResult += (worker1?"500000001,1000000000").mapTo[BigInt] futureResult.foreach(p=>res += Await.result(p,timeout.duration)) log.info("the result of 1 add to 1000000000 = "+res) println("use time:"+Stopwatch.format(System.nanoTime() - start)) } }}
本地actor启动类 LocalNodeApplication
package com.ycimport akka.actor.{ActorSystem, Props}import com.typesafe.config.ConfigFactory/** * Created by yc */object MasterAppilcation extends App{ val system = ActorSystem("MasterApp",ConfigFactory.load().getConfig("Master")) val master = system.actorOf(Props[MasterActor],name = "master") master ! "start" //Thread.sleep(100000) system.shutdown()}
application.conf
Master { akka { actor { provider = "akka.remote.RemoteActorRefProvider" } }}
build.sbt
name := "Master"version := "1.0"scalaVersion := "2.11.8"libraryDependencies += "com.typesafe.akka" % "akka-remote_2.11" % "2.4.11"libraryDependencies += "com.typesafe.akka" % "akka-actor_2.11" % "2.4.11"libraryDependencies += "com.typesafe.akka" % "akka-kernel_2.11" % "2.4.11"
远程actor
package com.ycimport akka.actor.Actor/** * Created by yc */class Worker1Actor extends Actor{ override def receive = { case message:String => val args = message.split(",") val start:BigInt = BigInt(args(0)) val end:BigInt = BigInt(args(1)) var result:BigInt = 0 println("from:"+start+"to:"+end) (start to end).foreach{ result += _ } sender ! result case _=> println("your argments is wrong") }}
驱动类
package com.ycimport akka.actor.{ActorSystem, Props}import akka.kernel.Bootableimport com.typesafe.config.ConfigFactory/** * Created by yc */class Worker1Application extends Bootable{ val system = ActorSystem("Worker1",ConfigFactory.load().getConfig("Worker1")) override def startup() = { system.actorOf(Props[Worker1Actor],name="worker1") } override def shutdown() = { system.terminate() }}
application.conf
Worker1 { akka { actor { provider = "akka.remote.RemoteActorRefProvider" } remote { enabled-transports = ["akka.remote.netty.tcp"] netty.tcp { hostname = "10.175.37.91" port = 2553 } } }}
build.sbt
name := "Worker1"version := "1.0"scalaVersion := "2.11.8"libraryDependencies += "com.typesafe.akka" % "akka-remote_2.11" % "2.4.11"libraryDependencies += "com.typesafe.akka" % "akka-actor_2.11" % "2.4.11"libraryDependencies += "com.typesafe.akka" % "akka-kernel_2.11" % "2.4.11"
示例源码:http://download.csdn.net/detail/tingibandequ/9672455
https://www.codeproject.com/Articles/1135973/Akka-remoting
0 0
- Akka DEMO
- Akka DEMO
- akka demo
- akka-actor(嘿咻demo)
- akka actor rpc demo
- Akka
- Akka
- Akka
- Akka
- akka分布式爬虫框架(一)——设计思路与demo
- Akka介绍(Akka 1)
- Akka简介
- akka编程
- Akka简介
- akka 处理
- AKKA,java
- Akka简介
- akka介绍
- 11.3模拟赛总结
- c语言数据结构之顺序表静态链表的创建及功能函数
- laplacian,degree,adjacency and oriented incidence matrix, differential and laplacian coordinates
- int型整数的最大值和最小值
- Android产品研发(十)-->尽量不使用静态变量保存数据
- akka demo
- 初涉入嵌入式开发!
- 第27节--层次聚类(下)
- A. Grasshopper And the String
- android 标题栏,状态栏和导航栏的区别
- 设计模式之单例模式(Singleton)
- 面向对象三之call和apply的区别
- 开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
- (十五)java多线程之并发集合ArrayBlockingQueue