1. 程式人生 > >Actor程式設計模型——akka

Actor程式設計模型——akka

介紹akka之前需要簡單說一下ScalaScala號稱下一代jvm語言,


集成了Java的面向物件,以及函數語言程式設計於一體,異常強大,但也複雜,此文不作爭論,姑且簡單介紹。

Akka框架是基於scala以及少量java程式碼實現的,Scala從其2.11.0版本起將自有的底層actor庫替換成了akka,可見akka的強大。

Akka官網的自吹:

Akka is a toolkit and runtime for building highly concurrent, distributed, and fault tolerant event-driven applications on the JVM.

Akka同時提供了JavaScala兩種API介面,下面就Java介面為例簡單介紹一下。

ØActor表示

²publicclassGreetingimplementsSerializable {

²publicfinalString who;

²publicGreeting(String who) { this.who = who; }

²}

²

²publicclassGreetingActorextendsUntypedActor {

²LoggingAdapter log = Logging.getLogger(getContext().system(), this

);

²

²publicvoid onReceive(Object message) throwsException {

²if (message instanceofGreeting)

²      log.info("Hello " + ((Greeting) message).who);

²  }

²}

²

²ActorSystem system = ActorSystem.create("MySystem");

²ActorRef greeter = system.actorOf(Props.create(GreetingActor.class), "greeter"

);

²greeter.tell(newGreeting("Charlie Parker"), ActorRef.noSender());

繼承UntypeActor可以定義一個actor角色的類,其中的onReceive方法可以接受來自其他actor傳遞過來的訊息

ActorSystem類負責建立最頂層的actor,其負責管理整個系統中actors監控樹。

Ø分散式

ActorSystem system = ActorSystem.create("MySystem");

//獲取機器2上面的一個actorgreeter

ActorSelection greeter = system.actorSelection("akka.tcp://[email protected]:2552/user/greeter");

// 向上面的actor傳送訊息,Greeting表示訊息

greeter.tell(newGreeting("Sonny Rollins"), ActorRef.noSender());

上面的幾行程式碼簡單展示了akka中的分散式環境中不同機器節點之間actor的相互通訊方式,可以看出和Erlang很類似,即遮蔽底層節點之間的通訊細節,然後提供簡單API介面。

Ø監控

classSupervisorextendsUntypedActor {

privateSupervisorStrategy strategy = newOneForOneStrategy(

10Duration.create("1 minute"), newFunction<ThrowableDirective>() {

@Override

publicDirective apply(Throwable t) {

if (t instanceofArithmeticExceptionreturn resume();

elseif (t instanceofNullPointerExceptionreturn restart();

elsereturn escalate();

      }

    });

@Override

publicSupervisorStrategy supervisorStrategy() {

return strategy;

  }

ActorRef worker = context.actorOf(Props.create(Worker.class));

publicvoid onReceive(Object message) throwsException {

if (message instanceofInteger) worker.forward(message, getContext());

  }

}

上面程式碼定義了一個監控角色的actor,可以看到其也是繼承與UntypeActor,因為監控者變身也是一個actor,其變身也可以被監控。與普通工作actor不同的是,其定義了監控策略SupervisorStrategy,負責處理子actor的重啟、停止工作。

相關推薦

Actor程式設計模型——akka

介紹akka之前需要簡單說一下Scala,Scala號稱下一代jvm語言, 集成了Java的面向物件,以及函數語言程式設計於一體,異常強大,但也複雜,此文不作爭論,姑且簡單介紹。 Akka框架是基於scala以及少量java程式碼實現的,Scala從其2.11.0

Scala併發程式設計模型AKKA

一、併發程式設計模型AKKA Spark使用底層通訊框架AKKA 分散式 master worker hadoop使用的是rpc 1)akka簡介 寫併發程式很難,AKKA解決spark這個問題。 akka構建在JVM平臺上,是

Actor併發程式設計模型淺析

一.Actor模型介紹 在單核 CPU 發展已經達到一個瓶頸的今天,要增加硬體的速度更多的是增加 CPU 核的數目。而針對這種情況,要使我們的程式執行效率提高,那麼也應該從併發方面入手。傳統的多執行緒方法又極其容易出現 Bug 而難以維護,不過別擔心,今天將要介紹另一種併發的模式能一定程度解決這些問題,那就是

AKKA 官方文件翻譯】為什麼現代系統需要一個新的程式設計模型

為什麼現代系統需要一個新的程式設計模型 akka版本2.5.8 版權宣告:本文為博主原創文章,未經博主允許不得轉載。 actor模型是由Carl Hewitt在數十年前提出的,這個模型提供了一種在高效能網路中進行並行處理的方式,然而這種環境在當

Apache Flink-程式設計指南-概念-程式設計模型

資料流程式設計模型 抽象層級 程式和資料流 並行資料流 視窗 事件 狀態化計算 為容錯的檢查點 流之上的批處理 下一步 抽象層級 Flink為開發流/批處理應用程式提供不能層級的抽象。 最低級別的抽象簡單提供狀態

併發伺服器程式設計模型

在併發伺服器程式設計模型中,最簡單的就是父程序監聽外來連線請求,一旦請求到來,父程序fork()子程序處理連線,與外來客戶端進行互動。 此時通用的做法是:父程序copy自己的地址空間給子程序,此時子程序擁有與父程序相同的開啟的檔案描述符!即,父子程序都有一個監聽套接字、一個連線套接字。連線建

Kafka 溫故(五):Kafka的消費程式設計模型

Kafka的消費模型分為兩種: 1.分割槽消費模型 2.分組消費模型 一.分割槽消費模型 二、分組消費模型 Producer : package cn.outofmemory.kafka; import java.util.Properties; import kaf

[Flink基本概念與部署]--Flink 程式設計模型【一】

一、Flink基本程式設計模型 圖1   1、Stateful Stream Processing 它位於最底層, 是core API 的底層實現;推薦學習時使用,生產中以穩定為主,不建議使用。 processFunction:開

Hadoop學習筆記—4.初識MapReduce 一、神馬是高大上的MapReduce   MapReduce是Google的一項重要技術,它首先是一個程式設計模型,用以進行大資料量的計算。對於大資料

Hadoop學習筆記—4.初識MapReduce 一、神馬是高大上的MapReduce   MapReduce是Google的一項重要技術,它首先是一個程式設計模型,用以進行大資料量的計算。對於大資料量的計算,通常採用的處理手法就是平行計算。但對許多開發

轉載:Spark中文指南(入門篇)-Spark程式設計模型(一)

原文:https://www.cnblogs.com/miqi1992/p/5621268.html 前言   本章將對Spark做一個簡單的介紹,更多教程請參考: Spark教程 本章知識點概括 Apache Spark簡介 Spark的四種執行模式 Spark基於

Linux學習之網路程式設計(TCP程式設計 模型總結)

言之者無罪,聞之者足以戒。 - “詩序” TCP通訊也就是伺服器和客戶端的一種通訊方式,它的整體框架為: 針對TCP通訊所用到的函式,我來做一下說明: (1)插座創造一個套接字 int socket(int domain,int type,int protocol) 標頭檔

Flink說明文件介紹---資料流程式設計模型

文章內容是通過相應的連結地址翻譯過來的 抽象等級 程式和資料流 並行資料流 視窗 時間 有狀態的操作 針對檢查點的容錯 批處理流 下一步 Flink提供不同級別的抽象來開發流/批處理應用程式。 接下來我們針對上面的每一個部分進行分析。 1、抽象等

併發程式設計模型總結

一:並行工作者模型 並行工作模型主要是有多個工作者,每個工作者單獨完成一個事件。 如下圖 委派器將任務分配給Worker,Worker單獨完成任務,java 7 中 java.util.concurrent 包中好多工具都是基於此模型實現的。明視訊記憶體在的存在的問題是工作器之間需

Strom核心元件與程式設計模型

1.Strom介紹 Storm用來實時處理資料,特點:低延遲、高可用、分散式、可擴充套件、資料不丟失。提供簡單容易理解的介面,便於開發 2.strom與hadoop的區別  Storm用於實時計算,Hadoop用於離線計算。  Storm處理的資料儲存在記憶體中,源源不斷;Hadoop處

從Storm到Flink:大資料處理的開源系統及程式設計模型(文末福利)

本文節選自CCF大資料教材系列叢書之《大資料處理》,本書由華中科技大學金海教授主編,包括大資料處理基礎技術、大資料處理程式設計與典型應用處理、大資料處理系統與優化三個方面。本教材以大資料處理程式設計為核心,從基礎、程式設計到優化等多個方面對大資料處理技術進行系統介紹,使得讀者能

五種程式設計模型(IO模型

  1、同步非同步,阻塞非阻塞區別聯絡     實際上同步與非同步是針對應用程式與核心的互動而言的。同步過程中程序觸發IO操作並等待(也就是我們說的阻塞)或者輪詢的去檢視IO操作(也就是我們說的非阻塞)是否完成。 非同步過程中程序觸發IO操作以後,直接返回

偽非同步I/O網路程式設計模型

       為了解決同步阻塞I/O面臨的一個鏈路需要一個執行緒處理的問題,後來有人對它的執行緒模型進行了優化—後端通過一個執行緒池來處理多個客戶端等請求接入,形成客戶端個數M;執行緒池最大執行緒數N的比例關係,其中M可以遠遠大於N。通過執行緒池可以靈活地調配

BIO網路程式設計模型

       網路程式設計的基本模型是Client/Server模型,即一端為伺服器端,提供位置資訊(IP和埠號),另一端為客戶端,通過連線操作向伺服器端監聽的地址發起連線請求,通過三次握手建立連線,如果連線建立成功,雙方就可以通過Socket進行通訊。&nb

【譯】spring註解程式設計模型

原文連結: https://github.com/spring-projects/spring-framework/wiki/Spring-Annotation-Programming-Model#stereotype-annotations 原文連結: https://github.

spring [email protected]註解程式設計模型分析

@EnableXXXX程式設計模型 在spring boot中,@EnableXXX註解的功能通常是開啟某一種功能。根據某些外部配置自動裝配一些bean,來達到開啟某些功能的目的。光說很抽象,要具體分析。 @Enable模型的實現方式基本有3種。一個基本的@