akka系列文章目录
- akka学习教程(十四) akka分布式实战
- akka学习教程(十三) akka分布式
- akka学习教程(十二) Spring与Akka的集成
- akka学习教程(十一) akka持久化
- akka学习教程(十) agent
- akka学习教程(九) STM软件事务内存
- akka学习教程(八) Actor中的Future-询问模式
- akka学习教程(七) 内置状态转换Procedure
- akka学习教程(六) 路由器Router
- akka学习教程(五) inbox消息收件箱
- akka学习教程(四) actor生命周期
- akka学习教程(三) 不可变对象
- akka学习教程(二)HelloWord
- akka学习教程(一)简介
我们都知道在编写java线程的时候,要传递不可变对象,这里akka也是如此
下面这个例子就是传递不可变对象:
package akka.unmodifiable;
import java.util.Collections;
import java.util.List;
/**
* Created by liubenlong on 2017/1/5.
*
* actor中传递的对象要是不可变对象。当然是为了安全了
*/
public final class Message {
private final int age;
private final List<String> list;
public Message(int age, List<String> list){
this.age = age;
/**
* 把普通list包装为不可变对象
*/
this.list = Collections.unmodifiableList(list);
}
public int getAge() {
return age;
}
public List<String> getList() {
return list;
}
}
package akka.unmodifiable;
import akka.actor.UntypedActor;
import com.alibaba.fastjson.JSONObject;
public class Greeter extends UntypedActor {
@Override
public void onReceive(Object msg) throws InterruptedException {
try {
System.out.println("Greeter收到的数据为:" + JSONObject.toJSONString(msg));
getSender().tell("Greeter工作完成。", getSelf());//给发送至发送信息.
}catch (Exception e){
e.printStackTrace();
}
}
}
package akka.unmodifiable;
import akka.actor.ActorRef;
import akka.actor.Props;
import akka.actor.UntypedActor;
import com.alibaba.fastjson.JSONObject;
import java.util.Arrays;
public class HelloWorld extends UntypedActor {
ActorRef greeter;
@Override
public void preStart() {
// create the greeter actor
greeter = getContext().actorOf(Props.create(Greeter.class), "greeter");
System.out.println("Greeter actor path:" + greeter.path());
// tell it to perform the greeting
greeter.tell(new Message(2, Arrays.asList("2", "dsf")), getSelf());
}
@Override
public void onReceive(Object msg) {
try {
System.out.println("HelloWorld收到的数据为:" + JSONObject.toJSONString(msg));
}catch (Exception e){
e.printStackTrace();
}
}
}
package akka.unmodifiable;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import com.typesafe.config.ConfigFactory;
public class Main {
// public static void main(String[] args) {
// akka.Main.main(new String[] { HelloWorld.class.getName() });
// }
public static void main(String[] args) {
//创建ActorSystem。一般来说,一个系统只需要一个ActorSystem。
//参数1:系统名称。参数2:配置文件
ActorSystem system = ActorSystem.create("Hello", ConfigFactory.load("akka.config"));
ActorRef a = system.actorOf(Props.create(HelloWorld.class), "helloWorld");
System.out.println(a.path());
}
}
参考资料
- 书籍《java高并发程序设计》
- AKKA官方文档