消息(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
有什么讨论的内容,能够加我微信公众号: