一、Akka基础
参考:https://doc.yonyoucloud.com/doc/akka-doc-cn/2.3.6/scala/book/chapter3/05_mailboxes.html
http://ifeve.com/akka-doc-java-untyped-actors/
二、主要类和方法的介绍
- Props类
Props是用于创建对象的配置对象,它是不可变的对象,所以它是线程安全的,完全可共享的。 - RoundRobinPool类
使用循环选择法的路由池,建议使用 - SpringActorProducer类
顾名思义,SpringActorProducer类为我们提供了另一种创建Actor的方法,利用ApplicationContext提供的getBean方式实例化Actor,前提是要把Actor依赖注入,代码如下:
其中initialize函数会在组件初始化的时候调用,因为每一个组件都继承自生命周期类//SpringActorProducer 类 public class SpringActorProducer implements IndirectActorProducer { final private ApplicationContext applicationContext; final private String actorBeanName; public SpringActorProducer(ApplicationContext applicationContext, String actorBeanName) { this.applicationContext = applicationContext; this.actorBeanName = actorBeanName; } @Override public Actor produce() { return (Actor) applicationContext.getBean(actorBeanName); } @Override public Class<? extends Actor> actorClass() { return (Class<? extends Actor>) applicationContext.getType(actorBeanName); } } @Component public class SpringExtension implements Extension { private ApplicationContext applicationContext; public void initialize(ApplicationContext applicationContext) { this.applicationContext = applicationContext; } public Props props(String actorBeanName, Object... args) { return Props.create(SpringActorProducer.class, applicationContext, actorBeanName, args).withMailbox(NamedUntypedActor.BOUNDED_MAILBOX); } }
AbstractLifeCycle , 在初始化的时候会调用AbstractLifeCycle的initialize方法,这里就相当于重
写。在Props.create()方法中会调用produce()方法得到Actor
二、创建Actor
一个actor系统通常是在根守护者上使用ActorSystem.actorOf创建actor来启动,然后在创建出的actor中使用ActorContext.actorOf来展开actor树。这些方法返回的是指向新创建的actor的引用。每个actor都拥有到它的父亲,它自己和它的子actor的引用(通过ActorContext访问)。这些引用可以与消息一起被发送给别的actor,以便接收方直接回复。
system.actorOf(props, "name")
context().actotOf(props , "name")
三、重要方法
- system.actorSelection() //通过路径的方式获得Actor
romte: ActorRef greeter = system.actorOf(Props.create(GreetingActor.class), "greeter");
local: ActorSelection greeter = system.actorSelection("akka.tcp://MySystem@machine2:2552/user/greeter");
- Props.create() //创建配置类
第一种形式:Props.create(MyActor.class, name) ,name为MyActor的构造参数。
第一种形式:Props.create(new MyActor (name ) ) 。