Actor模型提供了一个更高的抽象层次写并行和分布式系统。它减轻了开发人员从处理显式锁定和线
程管理,使它更容易编写正确的并发和并行系统。Actor是在卡尔休伊特1973进行界定,但已由Erlang语
言的推广和使用,例如在爱立信成功构建高并发和可靠的通信系统。
原文转载于www.toceansoft.com
创建 Actors
1、定义一个Actor的类
Actor在Java实现的扩展untypedactor类和执行onReceive方法。该方法将消息作为参数。
下面是一个例子:
import akka.actor.UntypedActor;
import akka.event.Logging;
import akka.event.LoggingAdapter;
public class MyUntypedActor extends UntypedActor {
LoggingAdapter log = Logging.getLogger(getContext().system(), this);
public void onReceive(Object message) throws Exception {
if (message instanceof String)
log.info("Received String message: {}", message);
else
unhandled(message);
}
}
2、Props
rops是一个配置类指定为Actor的创作选择。这里有一些例子说明如何创建一个道具实例。
Props props1 = new Props();
Props props2 = new Props(MyUntypedActor.class);
Props props3 = new Props(new UntypedActorFactory() {
public UntypedActor create() {
return new MyUntypedActor();
}
});
Props props4 = props1.withCreator(new UntypedActorFactory() {
public UntypedActor create() {
return new MyUntypedActor();
}
});
3、创建 Actors 和 Props
Actors都是通过在一个Props到actorof的方法创建实例。
ActorRef myActor = system.actorOf(new Props(MyUntypedActor.class).withDispatcher
("my-dispatcher"), "myactor");
4、创建具有默认构造函数的
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
ActorSystem system = ActorSystem.create("MySystem");
ActorRef myActor = system.actorOf(new Props(MyUntypedActor.class), "myactor");
通过呼叫actorof返回从而返回actorref实例。这是一个处理的untypedactor实例,你可以用它来与
untypedactor互动。这代表着ActorRef和Actor都是一一对应的关系,的actorref也是序列化的网络。这
意味着你可以将它,把它在无线和使用远程主机上,在网络上它仍然是代表原节点相同的Actor。
在上面的例子中,Actor是从系统的创建。也可以创建与其他Actor背景。不同的是如何在监管层次
设置。当使用上下文的当前Actor将所创建的子代Actor的主管。使用该系统,这将是一个顶级的Actor时
,是由系统监督。
public class FirstUntypedActor extends UntypedActor {
ActorRef myActor = getContext().actorOf(new Props(MyActor.class), "myactor");
名称参数是可选的,但你最好叫你的Actor,因为这是用在日志消息和确定Actor。名称不能为空或
开始$。如果给定的名称已在使用由另一个孩子同父母的Actor那就会被invalidactornameexception抛出
。
Actor开始创建时自动同步。当你创建untypedactor然后它会自动调用的回调方法untypedactor类前
。这是一个为Actor添加初始化代码的好地方。
|
|