akka简单示例-1
刚刚开始接触akka,网上找了2个简单示例,并在公司运营机器上尝试,踩了一些坑,在此记录。
1. 本地hello world
[torstan@sparkb5-i ~/akka_example/hello_world]$ cat src/helloWorld.scala
package our.examples
import akka.actor.Actor
import akka.actor.ActorSystem
import akka.actor.Props class HelloActor extends Actor {
def receive = {
case "hello" => println("hello back at you")
case _ => println("huh?")
}
} object HelloApp extends App {
override def main(args: Array[String]){
val system = ActorSystem("HelloSystem")
// default Actor constructor
val helloActor = system.actorOf(Props[HelloActor], name = "helloactor")
helloActor ! "hello"
helloActor ! "buenos dias"
}
}
[torstan@sparkb5-i ~/akka_example/hello_world]$ cat Makefile
SRC_DIR := src
SRC := $(shell find ${SRC_DIR} -name "*.scala")
DIR=our TARGET := HelloApp.jar SCALAC := scalac
SCFLAGS := /usr/local/scala-2.10.4/lib/akka-actors.jar .PHONY: all clean all: ${TARGET} ${TARGET}: ${SRC}
${SCALAC} -cp ${SCFLAGS} $^ clean:
${RM} -r ${TARGET} ${DIR}
[torstan@sparkb5-i ~/akka_example/hello_world]$ cat run.sh
#!/bin/bash java -cp \
.:/usr/local/scala-2.10.4/lib/scala-library.jar:/usr/local/scala-2.10.4/lib/akka-actors.jar:/usr/local/scala-2.10.4/lib/typesafe-config.jar\
our.examples.HelloApp
执行结果:
[torstan@sparkb5-i ~/akka_example/hello_world]$ ./run.sh
hello back at you
huh?
2. 简单CS示例
server端:
[torstan@sparkb5-i ~/akka_example/remote_service/server]$ cat src/HelloRemote.scala
package remote
import akka.actor.Actor
import akka.actor.ActorSystem
import akka.actor.Props class RemoteActor extends Actor{
def receive = {
case msg:String =>
println(s"RemoteActor received message '$msg'")
sender ! "hello from RemoteActor"
}
} object HelloRemote extends App{
val system = ActorSystem("HelloRemoteSystem")
val remoteActor = system.actorOf(Props[RemoteActor], name="RemoteActor")
remoteActor ! "The remote actor is alive"
}
[torstan@sparkb5-i ~/akka_example/remote_service/server]$ cat application.conf
akka {
loglevel = "DEBUG"
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
transport = "akka.remote.netty.NettyRemoteTransport"
//log-sent-messages = on
//log-received-messages = on
netty {
hostname = "172.27.6.240"
port = 5150
}
}
}
[torstan@sparkb5-i ~/akka_example/remote_service/server]$ cat Makefile
SRC_DIR := src
SRC := $(shell find ${SRC_DIR} -name "*.scala")
DIR=remote TARGET := HelloRemote.jar SCALAC := scalac
SCFLAGS := /usr/local/scala-2.10.4/lib/akka-actors.jar .PHONY: all clean all: ${TARGET} ${TARGET}: ${SRC}
${SCALAC} -cp ${SCFLAGS} $^ clean:
${RM} -r ${TARGET} ${DIR}
[torstan@sparkb5-i ~/akka_example/remote_service/server]$ cat run.sh
#!/bin/bash AKKA_LIB_PATH="/usr/local/akka-2.1.4/lib/akka/" java -cp \
.:/usr/local/scala-2.10.4/lib/scala-library.jar:/usr/local/scala-2.10.4/lib/akka-actors.jar:/usr/local/scala-2.10.4/lib/typesafe-config.jar:${AKKA_LIB_PATH}/akka-remote_2.10-2.1.4.jar:${AKKA_LIB_PATH}/protobuf-java-2.4.1.jar:${AKKA_LIB_PATH}/netty-3.5.8.Final.jar \
remote.HelloRemote
client端:
[torstan@sparkb5-i ~/akka_example/remote_service/client]$ cat src/HelloLocal.scala
package client
import akka.actor._ object HelloLocal extends App{
implicit val system = ActorSystem("LocalSystem")
val localActor = system.actorOf(Props[LocalActor], name="LocalActor")
localActor ! "START"
} class LocalActor extends Actor{
val remote = context.actorFor("akka://HelloRemoteSystem@172.27.6.240:5150/user/RemoteActor")
var counter = 0
def receive = {
case "START" =>
remote ! "HELLO from the LocalActor"
case msg:String =>
println(s"LocalActor received message: '$msg'")
if(counter < 5){
sender ! "hello back to you"
counter += 1
}
}
}
[torstan@sparkb5-i ~/akka_example/remote_service/client]$ cat application.conf
akka {
//loglevel = "DEBUG"
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
transport = "akka.remote.netty.NettyRemoteTransport"
//log-sent-messages = on
//log-received-messages = on
netty {
hostname = "127.0.0.1"
port = 0
}
}
}
[torstan@sparkb5-i ~/akka_example/remote_service/client]$ cat Makefile
SRC_DIR := src
SRC := $(shell find ${SRC_DIR} -name "*.scala")
DIR=client TARGET := HelloLocal.jar SCALAC := scalac
SCFLAGS := /usr/local/scala-2.10.4/lib/akka-actors.jar .PHONY: all clean all: ${TARGET} ${TARGET}: ${SRC}
${SCALAC} -cp ${SCFLAGS} $^ clean:
${RM} -r ${TARGET} ${DIR}
[torstan@sparkb5-i ~/akka_example/remote_service/client]$ cat run.sh
#!/bin/bash AKKA_LIB_PATH="/usr/local/akka-2.1.4/lib/akka/" java -cp \
.:/usr/local/scala-2.10.4/lib/scala-library.jar:/usr/local/scala-2.10.4/lib/akka-actors.jar:/usr/local/scala-2.10.4/lib/typesafe-config.jar:${AKKA_LIB_PATH}/akka-remote_2.10-2.1.4.jar:${AKKA_LIB_PATH}/protobuf-java-2.4.1.jar:${AKKA_LIB_PATH}/netty-3.5.8.Final.jar \
client.HelloLocal
执行结果:
[root@sparkb5-0 /data/torstan/akka_example/remote_service/server]# ./run.sh
[DEBUG] [12/10/2014 17:31:57.074] [main] [EventStream(akka://HelloRemoteSystem)] logger log1-Logging$DefaultLogger started
[DEBUG] [12/10/2014 17:31:57.080] [main] [EventStream(akka://HelloRemoteSystem)] Default Loggers started
[INFO] [12/10/2014 17:31:57.269] [main] [NettyRemoteTransport(akka://HelloRemoteSystem@172.27.6.240:5150)] RemoteServerStarted@akka://HelloRemoteSystem@172.27.6.240:5150
RemoteActor received message 'The remote actor is alive'
[INFO] [12/10/2014 17:32:01.768] [HelloRemoteSystem-10] [NettyRemoteTransport(akka://HelloRemoteSystem@172.27.6.240:5150)] RemoteClientStarted@akka://LocalSystem@127.0.0.1:48437
[DEBUG] [12/10/2014 17:32:01.769] [HelloRemoteSystem-10] [RemoteClient(akka://HelloRemoteSystem)] Starting remote client connection to [akka://LocalSystem@127.0.0.1:48437]
[DEBUG] [12/10/2014 17:32:01.771] [HelloRemoteSystem-10] [NettyRemoteTransport(akka://HelloRemoteSystem@172.27.6.240:5150)] RemoteServerClientConnected@akka://HelloRemoteSystem@172.27.6.240:5150: Client[akka://LocalSystem@127.0.0.1:48437]
RemoteActor received message 'HELLO from the LocalActor'
[DEBUG] [12/10/2014 17:32:01.782] [HelloRemoteSystem-akka.actor.default-dispatcher-2] [akka.serialization.Serialization(akka://HelloRemoteSystem)] Using serializer[akka.serialization.JavaSerializer] for message [java.lang.String]
RemoteActor received message 'hello back to you'
RemoteActor received message 'hello back to you'
RemoteActor received message 'hello back to you'
RemoteActor received message 'hello back to you'
RemoteActor received message 'hello back to you'
[torstan@sparkb5-i ~/akka_example/remote_service/client]$ ./run.sh
[INFO] [12/10/2014 17:32:01.668] [main] [NettyRemoteTransport(akka://LocalSystem@127.0.0.1:48437)] RemoteServerStarted@akka://LocalSystem@127.0.0.1:48437
[INFO] [12/10/2014 17:32:01.755] [LocalSystem-akka.actor.default-dispatcher-3] [NettyRemoteTransport(akka://LocalSystem@127.0.0.1:48437)] RemoteClientStarted@akka://HelloRemoteSystem@172.27.6.240:5150
LocalActor received message: 'hello from RemoteActor'
LocalActor received message: 'hello from RemoteActor'
LocalActor received message: 'hello from RemoteActor'
LocalActor received message: 'hello from RemoteActor'
LocalActor received message: 'hello from RemoteActor'
LocalActor received message: 'hello from RemoteActor'
遇到的坑:
[torstan@sparkb5-i ~/akka_example/remote_service/client]$ ./run.sh
Exception in thread "main" java.lang.ClassNotFoundException: akka.remote.RemoteActorRefProvider
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
at akka.actor.ReflectiveDynamicAccess$$anonfun$getClassFor$1.apply(DynamicAccess.scala:68)
at akka.actor.ReflectiveDynamicAccess$$anonfun$getClassFor$1.apply(DynamicAccess.scala:67)
at scala.util.Try$.apply(Try.scala:161)
google到答案是没有加载依赖文件akka-remote.jar,后来发现是没有安装akka。
2. Exception in thread "main" java.lang.NoSuchMethodException: akka.remote.RemoteActorRefProvider.<init>(java.lang.String, akka.actor.ActorSystem$Settings, akka.event.EventStream, akka.actor.Scheduler, akka.actor.DynamicAccess
google到答案:
akka简单示例-1的更多相关文章
- akka简单示例-2
手动敲了一遍计算pi的示例:http://www.gtan.com/akka_doc/intro/getting-started-first-scala.html 有个笔误,花了半个小时定位. [To ...
- AKKA HTTP 简单示例
AKKA HTTP 简单示例 依赖包: compile("com.typesafe.akka:akka-http_2.13:10.1.8") compile("com.t ...
- Linux下的C Socket编程 -- server端的简单示例
Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...
- C# 构建XML(简单示例)
C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...
- 根据juery CSS点击一个标签弹出一个遮罩层的简单示例
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- ACEXML解析XML文件——简单示例程序
掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...
- demo工程的清单文件及activity中api代码简单示例
第一步注册一个账户,并创建一个应用.获取app ID与 app Key. 第二步下载sdk 第三步新建工程,修改清单文件,导入相关的sdk文件及调用相应的api搞定. 3.1 修改清单文件,主要是加入 ...
- spring-servlet.xml简单示例
spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 <!-- springMVC简单配置 --> <?xml versi ...
- SignalR 简单示例
一.什么是 SignalR ASP.NET SignalR is a library for ASP.NET developers that simplifies the process of add ...
随机推荐
- Java:Date、Calendar、Timestamp的区别、相互转换与使用【转载】
1 Java.util.Date 包含年.月.日.时.分.秒信息 包含年.月.日信息. 继承自java.util.Date.在数据库相关操作中使用,如rs.getDate,ps.setDate等.rs ...
- linux下安装mysql-community后起不来
wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpmrpm -ivh http://repo.mysql.com/my ...
- 单页面应用SPA架构
个人认为单页面应用的优势相当明显: 前后端职责分离,架构清晰:前端进行交互逻辑,后端负责数据处理. 前后端单独开发.单独测试. 良好的交互体验,前端进行的是局部渲染.避免了不必要的跳转和重复渲染. 当 ...
- RHEL7和RHEL6的主要变化
RHEL7和RHEL6的主要变化 RHEL7 RHEL6 文件系统 XFS EXT4 内核版本 3.10.x-x系列 2.6.x-x系列 内核名称 Maipo Santiago 发布时间 2014 ...
- html移动端开发注意事项
meta <meta charset="utf8"> <meta name="viewport" content="width=de ...
- Windows Server 2008 R2 搭建FTP服务
一.安装ftp服务 1.在服务管理器"角色"右键单击"添加角色". 2.下一步. 3.勾选"Web 服务器(IIS)",下一步. 4.勾选 ...
- 关于ImageView加载出现OOM问题
略感蛋疼,一直以为应该不是这个问题的,所以调试了一下午,后来测试了下如果在XML里面改变ImageView的src话会出现什么问题 结果如我预料,仍然是只能显示部分图片,因为之前有运行成功了,我也不清 ...
- js添加onclick函数
document.getElementById('Add').setAttribute("onclick",AddNum()); 相当于不停的调用Addnum函数 应改成docum ...
- How to Install Tomcat
Read:http://www.ntu.edu.sg/home/ehchua/programming/howto/Tomcat_HowTo.html
- rpm命令数据库修复日志
今天在linux安装软件过程中遇到了一个小坑,rpm数据库被破坏: 状况: #rpm -qa | grep rpm 返回: [解决方案] 删除旧数据库,然后重建数据库: 删除旧数据库: # rm /v ...