这里我们创建第一个 Actor,名字叫 MyWork。
props()
静态方法 props() 用来构造这个 Actor 的实例,官方推荐每个 Actor 都配备一个 props() 的方法。
消息
接下来 Msg 中定义了这个 Actor 可以接收的消息。这里用 enum 变量来传递,也可以直接传递 String 或者其他类的对象。用 equals() 和 instanceof 对 msg 进行判断和转换就可以了。
生命周期
重写的 preStart(),postStop(),preRestart(),postRestart() 方法会在 Actor 生命周期的不同阶段调用,在其他文章里会介绍。
onReceive(Object msg)
onReceive(Object msg)方法是 Actor 的核心逻辑,Actor 接收到的消息都放在 MailBox 中,从这个 MailBox 中取出来的一条一条消息就通过这个方法进行处理。可以对不同消息定义不同的动作。
示例代码:
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.actor.UntypedAbstractActor;
import akka.event.Logging;
import akka.event.LoggingAdapter;
import scala.Option;
public class MyWork extends UntypedAbstractActor {
LoggingAdapter logger = Logging.getLogger(getContext().system(), this);
static public Props props() {
return Props.create(MyWork.class, () -> new MyWork());
}
public static enum Msg {
WORKING, EXCEPTION, STOP, RESTART, RESUME, BACK, SLEEP
}
@Override
public void preStart() {
System.out.println("MyWork preStart uid=" &#