akka基础学习

1.创建Actor

只要继承UntypedActor类,重写onReceive(message)方法,这个方法主要是接收Actor发来的信息。

2. Props配置类

 对创建角色确认选项,
  Props.create(MyActor.class);
    final ActorRef myActor =system.actorOf(Props.create(MyUntypedActor.class),
      "myactor");
final ActorRef child = getContext().actorOf(Props.create(MyUntypedActor.class), "myChild");
Inbox
final Inbox inbox = Inbox.create(system);
inbox.send(target, "hello");
assert inbox.receive(Duration.create(1, TimeUnit.SECONDS)).equals("world");
注册一个监视器
public class WatchActor extends UntypedActor {
  final ActorRef child = this.getContext().actorOf(Props.empty(), "child");
  {
    this.getContext().watch(child); // <-- the only call needed for registration
  }
  ActorRef lastSender = getContext().system().deadLetters();

  @Override
  public void onReceive(Object message) {
    if (message.equals("kill")) {
      getContext().stop(child);
      lastSender = getSender();
    } else if (message instanceof Terminated) {
      final Terminated t = (Terminated) message;
      if (t.getActor() == child) {
        lastSender.tell("finished", getSelf());
      }
    } else {
      unhandled(message);
    }
  }
}
在正确启动角色之后,preStart方法被调用,终止一个角色之后,其postStop钩子被调用时。即送到已终止角色的信息将被重定向到ActorSystem的deadLetters。

识别角色

每个角色都有一个唯一的逻辑路径,它有一个物理路径
通过角色选择集actorSelection,其中指定的路径被解释为一个java.net.URI,

一个角色选择集的路径元素可以包含通配符,允许消息额广播到该选择集:

getContext().actorSelection("/user/serviceB/worker*");

为了获得ActorSelection的ActorRef,发送一个消息到AcorSelection,AcorSelection有一个内置的识别消息(所有Actor都理解并且自动回复一个包含ActorRef的ActorIdentity消息。)。这个消息被Actor特殊处理。

public class Follower extends UntypedActor {
  final String identifyId = "1";
  {
    ActorSelection selection =
      getContext().actorSelection("/user/another");
    selection.tell(new Identify(identifyId), getSelf());
  }
  ActorRef another;

  final ActorRef probe;
  public Follower(ActorRef probe) {
    this.probe = probe;
  }

  @Override
  public void onReceive(Object message) {
    if (message instanceof ActorIdentity) {
      ActorIdentity identity = (ActorIdentity) message;
      if (identity.correlationId().equals(identifyId)) {
        ActorRef ref = identity.getRef();
        if (ref == null)
          getContext().stop(getSelf());
        else {
          another = ref;
          getContext().watch(another);
          probe.tell(ref, getSelf());
        }
      }

    } else if (message instanceof Terminated) {
      final Terminated t = (Terminated) message;
      if (t.getActor().equals(another)) {
        getContext().stop(getSelf());
      }
    } else {
      unhandled(message);
    }
  }
}
远程角色地址也可以查找
getContext().actorSelection("akka.tcp://app@otherhost:1234/user/serviceB");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容简介 本书将尝试帮助入门级、中级以及高级读者理解基本的分布式计算概念,并且展示 如何使用 Akka 来构建具备高容错性、可以横向扩展的分布式网络应用程序。Akka 是一 个强大的工具集,提供了很多选项,可以对在本地机器上处理或网络远程机器上处理的 某项工作进行抽象封装,使之对开发者不可见。本书将介绍各种概念,帮助读者理解 网络上各系统进行交互的困难之处,并介绍如何使用 Akka 提供的解决方案来解决这些 问题。 作者简介 Jason Goodwin 是一个基本上通过自学成才的开发者。他颇具企业家精神,在学校 学习商学。不过他从 15 岁起就开始学习编程,并且一直对技术保持着浓厚的兴趣。这对 他的职业生涯产生了重要的影响,从商学转向了软件开发。现在他主要从事大规模分布 式系统的开发。在业余时间,他喜欢自己原创电子音乐。 他在 mDialog 公司第一次接触到 Akka 项目。mDialog 是一家使用 Scala/Akka 的公司, 为主流出版商提供视频广告插入软件。这家公司最终被 Google 收购。他同时还是一名很 有影响力的“技术控”,将 Akka 引入加拿大一家主要的电信公司,帮助该公司为客户提 供容错性更高、响应更及时的软件。除此之 外,他还为该公司中的一些团队教授 Akka、 函数式以及并发编程等知识。 目录 第 1 章 初识 Actor:Akka 工具集以及 Actor 模型的介绍。 第 2 章 Actor 与并发:响应式编程。Actor 与 Future 的使用。 第 3 章 传递消息:消息传递模式。 第 4 章 Actor 的生命周期—处理状态与错误:Actor 生命周期、监督机制、Stash/ Unstash、Become/Unbecome 以及有限自动机。 第 5 章 纵向扩展:并发编程、Router Group/Pool、Dispatcher、阻塞 I/O 的处理以 及 API。 第 6 章 横向扩展—集群化:集群、CAP 理论以及 Akka Cluster。 第 7 章 处理邮箱问题:加大邮箱负载、不同邮箱的选择、熔断机制。 第 8 章 测试与设计:行为说明、领域驱动设计以及 Akka Testkit。 第 9 章 尾声:其他 Akka 特性。下一步需要学习的知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值