akka基础学习
来源:互联网 发布:java 302错误 编辑:程序博客网 时间:2024/05/28 09:31
1.创建Actor
只要继承UntypedActor类,重写onReceive(message)方法,这个方法主要是接收Actor发来的信息。
2. Props配置类
对创建角色确认选项,
Props.create(MyActor.class);
final ActorRef myActor =system.actorOf(Props.create(MyUntypedActor.class), "myactor");
final ActorRef child = getContext().actorOf(Props.create(MyUntypedActor.class), "myChild");
Inbox
final Inbox inbox = Inbox.create(system);inbox.send(target, "hello");assert inbox.receive(Duration.create(1, TimeUnit.SECONDS)).equals("world");
注册一个监视器
public class WatchActor extends UntypedActor { final ActorRef child = this.getContext().actorOf(Props.empty(), "child"); { this.getContext().watch(child); // <-- the only call needed for registration } ActorRef lastSender = getContext().system().deadLetters(); @Override public void onReceive(Object message) { if (message.equals("kill")) { getContext().stop(child); lastSender = getSender(); } else if (message instanceof Terminated) { final Terminated t = (Terminated) message; if (t.getActor() == child) { lastSender.tell("finished", getSelf()); } } else { unhandled(message); } }}
在正确启动角色之后,preStart方法被调用,终止一个角色之后,其postStop钩子被调用时。即送到已终止角色的信息将被重定向到ActorSystem的deadLetters。
识别角色
每个角色都有一个唯一的逻辑路径,它有一个物理路径
通过角色选择集actorSelection,其中指定的路径被解释为一个java.net.URI,
一个角色选择集的路径元素可以包含通配符,允许消息额广播到该选择集:
getContext().actorSelection("/user/serviceB/worker*");
为了获得ActorSelection的ActorRef,发送一个消息到AcorSelection,AcorSelection有一个内置的识别消息(所有Actor都理解并且自动回复一个包含ActorRef的ActorIdentity消息。)。这个消息被Actor特殊处理。
public class Follower extends UntypedActor { final String identifyId = "1"; { ActorSelection selection = getContext().actorSelection("/user/another"); selection.tell(new Identify(identifyId), getSelf()); } ActorRef another; final ActorRef probe; public Follower(ActorRef probe) { this.probe = probe; } @Override public void onReceive(Object message) { if (message instanceof ActorIdentity) { ActorIdentity identity = (ActorIdentity) message; if (identity.correlationId().equals(identifyId)) { ActorRef ref = identity.getRef(); if (ref == null) getContext().stop(getSelf()); else { another = ref; getContext().watch(another); probe.tell(ref, getSelf()); } } } else if (message instanceof Terminated) { final Terminated t = (Terminated) message; if (t.getActor().equals(another)) { getContext().stop(getSelf()); } } else { unhandled(message); } }}
远程角色地址也可以查找
getContext().actorSelection("akka.tcp://app@otherhost:1234/user/serviceB");
0 0
- akka基础学习
- AKKA学习
- scala akka基础编程
- Akka 实践(一)Akka基础
- Akka 实践(一)Akka基础
- akka学习教程(十一) akka持久化
- akka学习教程(十三) akka分布式
- akka学习教程(十四) akka分布式实战
- Scala Akka库学习
- akka概念 学习笔记
- akka 学习笔记
- Akka 学习笔记
- Akka学习笔记:日志
- akka学习之untypedpersistentactor
- AKKA学习笔记
- AKKA学习笔记
- AKKA学习笔记
- AKKA学习笔记
- UVa 725 Division(枚举)
- hdu 2102 A计划(bfs)
- iOS风格的Titlebar
- Spark 消息队列机制源码学习
- 9.5位操作(六)——交换某个整数的奇数位和偶数位,使用指令越少越好
- akka基础学习
- Python小技巧之——巧用with语句实现异常处理
- linux上使用netstat查看当前服务和监听端口
- duilib
- HTML的内联框架
- 达梦数据库备份恢复
- 制作TTF格式的字体
- constraint的用法
- Java中的static关键字解析