在Akka中,AbstractActor、UntypedActor和AbstractBehavior都是用于定义Actor的基类。它们之间的区别主要在于它们的使用方式和特点。
createReceive
方法来定义Actor的行为。它的主要特点是使用显式的消息处理方法和状态管理。import akka.actor.AbstractActor;
import akka.event.Logging;
import akka.event.LoggingAdapter;
public class MyActor extends AbstractActor {
private final LoggingAdapter log = Logging.getLogger(getContext().getSystem(), this);
@Override
public Receive createReceive() {
return receiveBuilder()
.match(String.class, message -> {
log.info("Received message: {}", message);
})
.build();
}
}
onReceive
方法来定义Actor的行为。它的主要特点是使用无类型的消息处理方法和状态管理。import akka.actor.UntypedAbstractActor;
import akka.event.Logging;
import akka.event.LoggingAdapter;
public class MyActor extends UntypedAbstractActor {
private final LoggingAdapter log = Logging.getLogger(getContext().getSystem(), this);
@Override
public void onReceive(Object message) throws Throwable {
if (message instanceof String) {
String msg = (String) message;
log.info("Received message: {}", msg);
}
}
}
createReceive
和onMessage
方法来定义Actor的行为。它的主要特点是使用类型安全的消息处理方法和状态管理。import akka.actor.typed.AbstractBehavior;
import akka.actor.typed.Behavior;
import akka.actor.typed.javadsl.Behaviors;
import akka.event.Logging;
import akka.event.LoggingAdapter;
public class MyBehavior extends AbstractBehavior {
private final LoggingAdapter log = Logging.getLogger(getContext().getSystem(), this);
public static Behavior create() {
return Behaviors.setup(MyBehavior::new);
}
private MyBehavior(ActorContext context) {
super(context);
}
@Override
public Receive createReceive() {
return newReceiveBuilder()
.onMessage(String.class, this::onMessage)
.build();
}
private Behavior onMessage(String message) {
log.info("Received message: {}", message);
return this;
}
}
总结: