Akka 框架的主要角色和常用方法

本文围绕Akka框架展开,介绍了其基础内容,包括参考文档。详细讲解了Props、RoundRobinPool、SpringActorProducer等主要类和方法,说明了创建Actor的方式,即通过ActorSystem.actorOf和ActorContext.actorOf,还列举了system.actorSelection()、Props.create()等重要方法。

一、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/

二、主要类和方法的介绍

  1. Props类
    Props是用于创建对象的配置对象,它是不可变的对象,所以它是线程安全的,完全可共享的。
  2. RoundRobinPool类
    使用循环选择法的路由池,建议使用
  3. SpringActorProducer类
    顾名思义,SpringActorProducer类为我们提供了另一种创建Actor的方法,利用ApplicationContext提供的getBean方式实例化Actor,前提是要把Actor依赖注入,代码如下:
    //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);
        }
    }
    
    其中initialize函数会在组件初始化的时候调用,因为每一个组件都继承自生命周期类
    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")

三、重要方法

  1. 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");
  1. Props.create() //创建配置类
    第一种形式:Props.create(MyActor.class, name) ,name为MyActor的构造参数。
    第一种形式:Props.create(new MyActor (name ) ) 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值