Spark:Akka入門初窺
首先明白下面幾點:
- ActorSystem是該程序中的Actor的管理者,負責建立和監控所有的actor
- ActorSystem是單例的
- Actor負責通訊
如下我們使用Akka實現一個簡單的RPC通訊,首先我們看下他們互動的流程
如下給出Akka相關的Maven包
<dependency> <groupId>com.typesafe.akka</groupId> <artifactId>akka-actor_2.10</artifactId> <version>2.3.14</version> </dependency> <dependency> <groupId>com.typesafe.akka</groupId> <artifactId>akka-remote_2.10</artifactId> <version>2.3.14</version> </dependency>
如下是Master端的程式碼
class Master extends Actor { println("constructor invoked") //該方法在構造器後執行 override def preStart(): Unit = { println("preStart invoked") } // 用於接收訊息 override def receive: Receive = { case "connect" => { println("a client connected") sender ! "reply" //為context.sender(),即Worker連線端的actor } case "hello" => { println("hello") } } } object Master { def main(args: Array[String]) { val host = args(0) val port = args(1).toInt // 準備配置 val configStr = s""" |akka.actor.provider = "akka.remote.RemoteActorRefProvider" |akka.remote.netty.tcp.hostname = "$host" |akka.remote.netty.tcp.port = "$port" """.stripMargin val config = ConfigFactory.parseString(configStr) //ActorSystem老大,輔助建立和監控下面的Actor,他是單例的 val actorSystem = ActorSystem("MasterSystem", config) //建立Actor, 起個名字Master,其會在Worker連線Master的時候使用到 val master = actorSystem.actorOf(Props[Master], "Master")//Master主構造器會執行 master ! "hello" //傳送資訊 actorSystem.awaitTermination() //讓程序等待著, 先別結束 } }
如下是Worker端的程式碼
class Worker(val masterHost: String, val masterPort: Int) extends Actor{
var master : ActorSelection = _
//建立連線
override def preStart(): Unit = {
//在master啟動時會列印下面的那個協議, 可以先用這個做一個標誌, 連線哪個master
//繼承actor後會有一個context, 可以通過它來連線
master = context.actorSelection(s"akka.tcp:// [email protected]$masterHost:$masterPort/user/Master") //需要有/user, Master要和master那邊建立的名字保持一致
master ! "connect"
}
override def receive: Receive = {
case "reply" => {
println("a reply form master")
}
}
}
object Worker {
def main(args: Array[String]) {
val host = args(0)
val port = args(1).toInt
val masterHost = args(2)
val masterPort = args(3).toInt
// 準備配置
val configStr =
s"""
|akka.actor.provider = "akka.remote.RemoteActorRefProvider"
|akka.remote.netty.tcp.hostname = "$host"
|akka.remote.netty.tcp.port = "$port"
""".stripMargin
val config = ConfigFactory.parseString(configStr)
//ActorSystem老大,輔助建立和監控下面的Actor,他是單例的
val actorSystem = ActorSystem("WorkerSystem", config)
actorSystem.actorOf(Props(new Worker(masterHost, masterPort)), "Worker")
actorSystem.awaitTermination()
}
}
程式碼分析:由上面的程式碼可知,其Worker和Master端建立ActorSystem的方法是類似的,Worker端通過context.actorSelection獲得Master端actor的引用,並和其建立連線通訊。而Master又可以在receive方法中獲得Worker端的連線的actor,從而實現二者互動。
相關推薦
Spark:Akka入門初窺
首先明白下面幾點: ActorSystem是該程序中的Actor的管理者,負責建立和監控所有的actorActorSystem是單例的Actor負責通訊如下我們使用Akka實現一個簡單的RPC通訊,首先我們看下他們互動的流程 如下給出Akka相關的Maven包
Java-RPC:2)NIO入門初窺
Java NIO(New IO)是從Java 1.4版本開始引入的一個新的IO API,可以替代標準的Java IO APIChannels and Buffers(通道和緩衝區):標準的IO基於位元組流和字元流進行操作的,而NIO是基於通道(Channel)和緩衝區(Bu
《零基礎入門學習Python》第063講:論一隻爬蟲的自我修養11:Scrapy框架之初窺門徑
上一節課我們好不容易裝好了 Scrapy,今天我們就來學習如何用好它,有些同學可能會有些疑惑,既然我們懂得了Python編寫爬蟲的技巧,那要這個所謂的爬蟲框架又有什麼用呢?其實啊,你懂得Python寫爬蟲的程式碼,好比你懂武功,會打架,但行軍打仗你不行,畢竟敵人是千軍萬馬,縱使你再強,
DCOS實踐分享(4):如何基於DC/OS整合SMACK(Spark, Mesos, Akka, Cassandra, Kafka)
lec attribute 種子 bst 均衡器 all connect www pro 這篇文章入選CSDN極客頭條 http://geek.csdn.net/news/detail/71572 當前,要保證業務的市場競爭力,僅靠設計一個可用並且好看的產品,已經完全不
SSM-Spring-08:Spring的靜態代理初窺案例
ssp unit text app OS create 創建 test BE ------------吾亦無他,唯手熟爾,謙卑若愚,好學若饑------------- 靜態代理 java的設計模式的代理模式,就是靜態代理 寫在前面的話,靜態代理的優點
轉載:Spark中文指南(入門篇)-Spark程式設計模型(一)
原文:https://www.cnblogs.com/miqi1992/p/5621268.html 前言 本章將對Spark做一個簡單的介紹,更多教程請參考: Spark教程 本章知識點概括 Apache Spark簡介 Spark的四種執行模式 Spark基於
JVM初窺:Java物件的記憶體結構
物件記憶體結構 Class檔案以位元組碼的形式儲存在方法區當中,用來描述一個類本身的記憶體結構。當使用Class檔案新建物件時,物件例項的記憶體結構又究竟是個什麼樣子呢? 如圖所示,為了表示物件的屬性、方法等資訊,HotSpot VM使用物件頭部的一個指標指向Class區域的方式來
12行簡單的Python程式碼,初窺爬蟲的祕境!小白入門必備!
往往不少童鞋寫論文苦於資料獲取艱難,輾轉走上爬蟲之路; 許多分析師做輿情監控或者競品分析的時候,也常常使用到爬蟲。 今天,本文將帶領小夥伴們通過12行簡單的Python程式碼,初窺爬蟲的祕境。 進群:943752371即可獲取各類Python入門學習資料!
Spark:Spark 程式設計模型及快速入門
Spark程式設計模型SparkContext類和SparkConf類程式碼中初始化我們可通過如下方式呼叫 SparkContext 的簡單建構函式,以預設的引數值來建立相應的物件。val sc = new SparkContext("local[4]", "Test Spa
Redis初窺:主從Replication的配置
概述 Redis的replication機制允許slave從master那裡通過網路傳輸拷貝到完整的資料備份。具有以下特點: 非同步複製。從2.8版本開始,slave能不時地從master那裡獲取到資料。允許單個master配置多個slaveslave允許其它slave連線
Scala超程式設計:伊甸園初窺
閱讀建議 本文的行文風格不求閱讀意義上的可讀性,而是期望讀者能夠跟著本文的一些探索,自己做一些嘗試,即git clone本文涉及的程式碼閱讀並實踐。 至於Scala超程式設計的一些介紹,請閱讀 @王在祥 的《神奇的Scala Macro之旅系列》: 一, 二, 三, 四。 繞不開的Sbt 我們從Mac
MyBatis初窺:自定義TypeHandler處理列舉
TypeHandler簡介 在MyBatis中,StatementHandler負責對需要執行的SQL語句進行預編譯處理,主要完成以下兩項工作:1.呼叫引數處理器(ParameterHandler)來設定需要傳入SQL的引數;2.呼叫結果集處理器(ResultSetHand
JAVA初窺:字元編碼
參考書籍:《深入分析Java Web技術內幕(修訂版)》----許令波著 編碼問題一直在困擾著程式開發人員,這在Java中尤其突出,因為Java是跨平臺語言,字元在不同平臺之間進行傳輸時經常需要進行編碼切換。 為什麼要編碼? 眾所周知,計算機其實是很笨的,它只識別數字0和
【深度分析Zigbee】Zstack協議棧初窺(六):協調器的組網過程詳解
這一講我要詳細說一下協調器的組網過程。在Zstack中,網路組網是從ZDApp_Init函式開始的。具體的執行流程為:Main()->osal_init_system()->osalInitTasks()->ZDApp_In it()。進入到ZDApp_I
【Cocos2D-X 】初窺門徑(5)CCAction:動作
//移動到,1s, pRole->runAction(CCMoveTo::create(1,ccp(300,300))); //跳躍到,1s,高度50,分為5步 pRole->runAction(CCJumpTo::create(1,ccp(300,300),50,5)); //放
我的Go語言學習之旅二:入門初體驗 Hello World
好吧,所有的程式設計師們都已經習慣了,學習任何一門語言,我們都會以Hello World例項開始我們的學習,我也不例外。先來一個簡單的例子 開啟編輯器 (可以用記事本,我已經習慣 Notepad++了)輸入以下內容 package main import
Python爬蟲(入門+進階)學習筆記 2-1 爬蟲工程化及Scrapy框架初窺
本章節將會系統地介紹如何通過Scrapy框架把爬蟲工程化。本節主要內容是:簡單介紹Python和爬蟲的關係,以及將要使用的Scrapy框架的工作流程。Python適合做爬蟲的原因語言本身簡單,適合敏捷開發有比較完善的工具鏈足夠靈活,以應對各種突然狀況爬蟲的知識體系前端相關知識:html,css,js;瀏覽器相
【Cocos2D-X 遊戲引擎】初窺門徑(11)CCUserDefault:儲存資料
儲存簡單的資料用CCUserDefault和Android中的SharedPreferences一樣,都是以鍵值對儲存的。 //獲取bool型值 bool getBoolForKey(const char* pKey, bool defaultValue = fals
JVM初窺:垃圾收集器(一)
參考書籍:《深入理解Java虛擬機器——JVM高階特性與最佳實踐(第2版)》 Java語言出來之前,程式開發更多的是使用C或者C++語言,然而在C或者C++語言中存在一個很大的矛盾:建立物件時要不斷
Redis初窺:Hash操作常用命令
HGET命令 命令語法:HGET key field命令用途:返回雜湊表鍵 key 中給定域 field 的值。時間複雜度:O(1) 127.0.0.1:6379> exists book (