akka 2.3.11 实例
来源:互联网 发布:网络直播公司老板跑路 编辑:程序博客网 时间:2024/05/21 10:16
package testimport java.io.Fileimport scala.concurrent.duration._import akka.actor.Actorimport akka.actor.ActorIdentityimport akka.actor.ActorRefimport akka.actor.Identifyimport akka.actor.ReceiveTimeoutimport akka.actor.Terminatedimport akka.actor.Propsimport akka.actor.ActorSystemimport com.typesafe.config.ConfigFactoryobject Sender { def main(args: Array[String]): Unit = { val file =new File("D:/calculator.conf"); System.out.println(file); val system = ActorSystem("Sys", ConfigFactory.parseFile(file)) val remoteHostPort = if (args.length >= 1) args(0) else "127.0.0.1:2553" val remotePath = s"akka.tcp://Sys@$remoteHostPort/user/rcv" val totalMessages = if (args.length >= 2) args(1).toInt else 500000 val burstSize = if (args.length >= 3) args(2).toInt else 5000 val payloadSize = if (args.length >= 4) args(3).toInt else 100 system.actorOf(Sender.props(remotePath, totalMessages, burstSize, payloadSize), "snd") } def props(path: String, totalMessages: Int, burstSize: Int, payloadSize: Int): Props = Props(new Sender(path, totalMessages, burstSize, payloadSize)) private case object Warmup case object Shutdown sealed trait Echo case object Start extends Echo case object Done extends Echo case class Continue(remaining: Int, startTime: Long, burstStartTime: Long, n: Int) extends Echo}class Sender(path: String, totalMessages: Int, burstSize: Int, payloadSize: Int) extends Actor { import Sender._ val payload: Array[Byte] = Vector.fill(payloadSize)("a").mkString.getBytes var startTime = 0L var maxRoundTripMillis = 0L context.setReceiveTimeout(3.seconds) sendIdentifyRequest() def sendIdentifyRequest(): Unit = context.actorSelection(path) ! Identify(path) def receive = identifying def identifying: Receive = { case ActorIdentity(`path`, Some(actor)) => context.watch(actor) context.become(active(actor)) context.setReceiveTimeout(Duration.Undefined) self ! Warmup case ActorIdentity(`path`, None) => println(s"Remote actor not available: $path") case ReceiveTimeout => sendIdentifyRequest() } def active(actor: ActorRef): Receive = { case Warmup => sendBatch(actor, burstSize) actor ! Start case Start => println(s"Starting benchmark of $totalMessages messages with burst size $burstSize and payload size $payloadSize") startTime = System.nanoTime val remaining = sendBatch(actor, totalMessages) if (remaining == 0) actor ! Done else actor ! Continue(remaining, startTime, startTime, burstSize) case c @ Continue(remaining, t0, t1, n) => val now = System.nanoTime() val duration = (now - t0).nanos.toMillis val roundTripMillis = (now - t1).nanos.toMillis maxRoundTripMillis = math.max(maxRoundTripMillis, roundTripMillis) if (duration >= 500) { val throughtput = (n * 1000.0 / duration).toInt println(s"It took $duration ms to deliver $n messages, throughtput $throughtput msg/s, " + s"latest round-trip $roundTripMillis ms, remaining $remaining of $totalMessages") } val nextRemaining = sendBatch(actor, remaining) if (nextRemaining == 0) actor ! Done else if (duration >= 500) actor ! Continue(nextRemaining, now, now, burstSize) else actor ! c.copy(remaining = nextRemaining, burstStartTime = now, n = n + burstSize) case Done => val took = (System.nanoTime - startTime).nanos.toMillis val throughtput = (totalMessages * 1000.0 / took).toInt println(s"== It took $took ms to deliver $totalMessages messages, throughtput $throughtput msg/s, " + s"max round-trip $maxRoundTripMillis ms, burst size $burstSize, " + s"payload size $payloadSize") actor ! Shutdown case Terminated(`actor`) => println("Receiver terminated") } /** * @return remaining messages after sending the batch */ def sendBatch(actor: ActorRef, remaining: Int): Int = { val batchSize = math.min(remaining, burstSize) (1 to batchSize) foreach { x => actor ! payload } remaining - batchSize }}
package testimport java.io.Fileimport akka.actor.Actorimport akka.actor.ActorSystemimport com.typesafe.config.ConfigFactoryimport akka.actor.Propsobject Receiver { def main(args: Array[String]): Unit = { val file =new File("D:/remotelookup.conf"); System.out.println(file); val system = ActorSystem("Sys", ConfigFactory.parseFile(file)) system.actorOf(Props[Receiver], "rcv") }}class Receiver extends Actor { import Sender._ def receive = { case m: Echo => sender() ! m case _ => }}
calculator.conf
include "common"akka { # LISTEN on tcp port 2552 remote.netty.tcp.port = 2552}
common.conf
akka { actor { provider = "akka.remote.RemoteActorRefProvider" } remote { netty.tcp { hostname = "127.0.0.1" } }}
remotelookup.conf
include "common"akka { remote.netty.tcp.port = 2553}
全部从官网同一个akka版本里的
akka-actor_2.10-2.3.11.jar
akka-remote_2.10-2.3.11.jar
config-1.2.1.jar
netty-3.8.0.Final.jar
protobuf-java-2.5.0.jar
0 0
- akka 2.3.11 实例
- akka 2.3.11 实例
- akka 2.3.11 实例
- akka实例
- 【Akka】Akka入门编程实例
- 【Akka】Akka入门编程实例
- 一个akka小实例
- akka remote实例
- akka 入门实例
- akka router简单实例
- Akka
- Akka
- Akka
- Akka
- Akka和ProtoBuf的简单实例
- akka 定时任务实例for play2.1
- java中的Actor模式 Akka实例
- akka.http.scaladsl.model.ContentTypes 代码实例
- 解决root用户无法登录mysql
- SCCM 2012安装教程(Part1)
- 抚摸那条船——彭晓东
- Spring 配置的2个常见问题
- hive update delete
- akka 2.3.11 实例
- uploadify各种问题解决
- ios一键打包
- JVM性能调优
- Mongodb模糊查询
- Ubuntu下将现有的文件打包成deb包
- 如何提升MySQL批量插入的效率
- Cordys 事物处理Demo
- 关于Fragment对于回退栈的理解问题