Actor调用
从上面的例子中,我们可以大概的对AKKA在JAVA中的使用有一个全局的概念.这里我们在稍微细致的讲解一下.
在JAVA中使用AKKA进行开发主要有这几个步骤:
- 定义消息模型.
- 创建Actor的实现,以及业务逻辑
- 在需要使用AKKA的地方获取到ActorSystem,然后根据业务的数据流,获取到合适的Actor,给Actor发送消息.
- 在Actor的实现用,对接收到的消息进行具体的处理或转发.从而形成业务逻辑流.
下面我们分别讲解一下这几个步骤.
定义消息模型
在AKKA中的消息模型可以是任意实现了Serializable
接口的对象.和大多数的远程调用框架一样,为了AKKA的高可用,以后可能会牵涉到远程调用和集群,那么消息模型就需要跨网络的进行传输,这就要求对消息模型进行序列化和反序列化.因此,要求消息模型必须实现Serializable
接口.具体的序列化和反序列化在后面讲解远程调用的时候再细谈.
创建Actor的实现.
有了消息模型后,就需要有Actor对这些消息进行消费了.
在AKKA中Actor分为了TypedActor
和UnTypedActor
.
其中TypedActor
是Akka
基于Active对象
(Active Object)设计模式的一个实现,该设计模式解耦了在一个对象上执行方法和调用方法的逻辑,执行方法和调用方法分别在各自的线程上独立运行.该模式的目标是通过使用异步的方法调用和内部的调度器来处理请求,从而实现方法的执行时异步处理的.通俗点来讲,TypedActor
就是可以预先的定义一系列的接口和实现,然后通过ActorSystem
来创建这个TypedActor
的实例,当调用这个实例的方法的时候,其实是会异步的执行方法的,而不是同步的.至于如何异步的,这就交由AKKA内部来实现了,开发人员不需要关心.这其实就比较像goLang
语言中的fmt
的一些方法或go
关键字,很简单的方法调用背后隐藏了异步的执行操作.
而UnTypedActor
更像是JAVA中的JMS调用.方法的调用和执行完全依赖了消息,通过消息的类型或内容来区别不同的执行.对于消息的发送方式都是相同的,那就是直接给这个Actor的邮箱中发送Message.也就是说UnTypedActor
更接近于我们前两个小节中所说的Actor
这个概念.
事实也是如此,在AKKA中我们更多的是倾向于使用UnTypedActor
向Actor
系统间传递消息,而TypedActor
更多的是用来桥接Actor
系统和非Actor
的.