zoukankan      html  css  js  c++  java
  • [Scala] akka actor编程(一)

    Akka基础

    • Akka笔记之Actor简介

        Akka中的Actor遵循Actor模型。你可以把Actor当作是人。这些人不会亲自去和别人交谈。他们只通过邮件来交流。

        1. 消息传递 2. 并发 3. 异常处理 4. 多任务 5. 消息链

    • Akka笔记之消息传递

            消息发送给actor代理;

            消息是不可变对象(可带有属性的case class);

            分发器dispatcher和邮箱: dispatcher从actorRef取出一条消息放在目标actor邮箱中,然后放mailbox放在一个Thread上;当MailBox的run方法运行的时候,它会从队列中取出一条消息, 然后将它传给Actor去处理。在Actor的世界中,邮箱一有机会就会要求Actor去完成自己的任务。

    • Akka笔记之日志及测试

            使用slf4j打印日志:Akka通过一个叫做ActorLogging的特质(trait)来实现的这一功能。可以这个trait混入(mixin)到类中。当我们要打印一条消息的时候,ActorLogging中的日志方法会将日志信息发布到一个EventStream流中。没错,我的确说的是发布。

            EventStream:EventStream就像是一个我们用来发布及接收消息的消息代理。它与常见的消息中间件的根本区别在于EventStream的订阅者只能是一个Actor。DefaultLogger默认订阅这些消息并打印到标准输出。

    akka{ 
        loggers = ["akka.event.slf4j.Slf4jLogger"]
        loglevel = "DEBUG"
        logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
    }
    • Akka笔记之请求与响应

            技术上来讲,消息发送给Actor就是希望能有副作用的。设计上便是如此。目标Actor可以不做响应,也可以做如下两件事情——

            1. 给发送方回复一条响应(在本例中,TeacherActor会将一句名言回复给StudentActor)

            2. 将响应转发给其它的目标受众Actor,后者也可以进行响应/转发/产生副作用。Router和Supervisor就是这种情况。

    • Akka笔记之配置及调度

       配置管理:applicaiton.conf

            调度器: 一次调度和循环调度。import context.dispatcher这条语句非常重要。schedule方法需要一个非常重要的隐式参数——ExecutionContext。schedule方法只是把消息发送封装到了一个Runnable中,而它最终是由传进来的ExecutionContext来执行的。

    • Akka笔记之生命周期

            preStart: Actor重启的时候(比如说崩溃了之后重启)通过调用preStart方法还能重新初始化。而构造方法则实现不了这点(只会初始化一次)。

            postStop: ActorSystem.stop(), ActorContext.stop(), PoisonPill 都可以终止一个actor,关闭时回调用postStop()

    • Akka笔记之子Actor及路径

            Actor是纯粹的分层结构。你所创建出来的Actor必定是某个Actor的子Actor。actorRef.path可以获取到actor路径。

            子Actor:当某个任务由一个或多个子任务所组成的时候通常就会创建子Actor。或者当某个任务由父Actor执行比较容易出错,而你希望将它进行隔离的时候,也可以使用子Actor(这样当子Actor崩溃的时候,你还能够恢复它)。如果不存在父子Actor关系,就不要创建子Actor。

    • Akka笔记之Actor监控

            监控(Watch):不管Actor是怎么挂掉的,系统里面会有些Actor希望能够知晓这一情况。ActorContext.watch和ActorContext.unwatch就是监控与取消监控的方法了。进行了监控之后,监控者会收到已停止的Actor发来的一条Terminated消息,它们只需要把这个消息放到receive函数的处理逻辑里就好了。 

            监督(Supervision):只存在于父子关系的actor之间。

  • 相关阅读:
    Linked List Cycle leetcode java (链表检测环)
    Remove Duplicates from Sorted List II leetcode java
    Remove Duplicates from Sorted List leetcode java
    Merge Two Sorted Lists leetcode java
    Swap Nodes in Pairs leetcode java
    Median of Two Sorted Array leetcode java
    阿里云最便宜的四种域名注册
    nohup和&后台运行,进程查看及终止
    ipv6转ipv4 NAT64与DNS64基本原理概述
    ros使用pppoe拨号获取ipv6,并且下发IPV6的dns到客户机win7
  • 原文地址:https://www.cnblogs.com/qingwen/p/5168923.html
Copyright © 2011-2022 走看看