消息(Messages)能夠是任意類型(任何Any的子類)。您能夠發送裝箱的原始值(例如String, Integer, Boolean等)做爲消息以及諸如數組和集合類型等普通數據結構。Case類和Case對象建立更優的消息,由於它們是不可改變的,而且支持模式匹配,有利於咱們在Actor中匹配所接收到的消息。html
Hello World Actor 使用三種不一樣的 messages:api
當定義Actor及其Messages時,請記住如下建議:數組
props
方法,也是一個常見模式描述actor的構造。讓咱們看看的同伴對象和實現了Actor的Greeter和Printer實現如何演示這些最佳實踐。安全
下面的代碼片斷是在AkkaQuickstart.scala中用來給同伴對象定義mesage被Greeter對象處理,而且定義了props方法微信
「props方法」建立並返回一個props實例。props是一個配置類,用來指定建立actors的選項,認爲它是一個不可改變的、可自由共享的建立actor的方法,能夠包含相關的部署信息。這個示例簡單地傳遞了當構造時角色須要的參數。咱們將在本教程稍後看到「props方法」。數據結構
下面的代碼片斷在AkkaQuickstart.scala,實現Greeter Actor:分佈式
讓咱們分解這段功能:ide
和Greeter相似,夥伴對象定義Printer Actor要處理的消息,定義 props方法和Actor指望的消息:函數
Printer Actor的實現:優化
Printer的實現很是簡單
到目前爲止,咱們已經研究了Actor及其message的定義。如今讓咱們深刻到位置透明性的力量,並看看如何建立Actor實例。
在Akka中,您不能使用new關鍵字建立一個Actor實例。取而代之的,您可使用工廠建立Actor實例。工廠不會返回一個Actor實例,而是指向實例的引用,akka.actor.ActorRef這種間接方式在分佈式系統中增長了的力量和靈活性。
在Akka中,並不關心位置。位置透明性意味着,在保留相同語義的同時,ActorRef在能夠表示進程中運行的Actor或遠程機器上的實例。若是須要,運行庫能夠經過更改Actor位置或運行時的整個應用程序拓撲來優化系統。這使得「let it crash」的失敗管理模型,系統能夠經過崩潰錯誤的Actors和重啓健康的故障管理來治癒本身。
akka.actor.ActorSystem factory 在某種程度上相似於Spring的BeanFactory。它充當Actor的容器,並管理他們的生命週期。在工廠方法建立Actor並獲取兩個參數,一個名爲「Props」和「name」的配置對象。
Actor和ActorSystem名字在Akka中很重要。例如,您使用它們進行查找。使用與您的域模型相一致的有意義的名稱使得在道路上更容易地對它們進行理性的解釋。
上一個話題回顧了helloworld Actor的定義。讓咱們來看看建立Greeter和Printer實例的AkkaQuickstart.scala文件中的代碼:
注意到下面這些:
對於Greeter,代碼建立了三個角色實例,每一個實例都帶有特定的問候消息。
注意:在本例中,Greeter Actors實例都使用相同的Printer實例,可是咱們能夠建立多個Printer Actor實例。例子中使用一個示例來講明消息傳遞的一個重要概念,稍後咱們將介紹。
接下來,讓咱們來看看如何與Actors溝通。
原文:https://developer.lightbend.com/guides/akka-quickstart-scala/create-actors.html
有什麼討論的內容,能夠加我微信公衆號: