随着Facebook 190亿美金收购WhatsApp,其背后的Erlang语言受到关注,本质上Erlang的新型对象消息模型被抽象为Actors模型,作为Actors模型的Akka框架有Java和Scala两个版本,最近,Dr Gerald Loeefler在2014年LSUG大会发表了从Java并发的高级层次将Actors模型与Java EE7的Enterprise JavaBeans,特别是无状态的会话bean和JMS的消息驱动bean进行比较,它们之间是有共性。
作为一个高级集成架构师,应该在程序范式的高级层次定义并发,基于组件级别的并发,并且尽可能地避免涉及线程概念以及线程池等底层概念。
该谈话围绕了 Active Objects(活动对象)设计模式,从活动对象模式角度看,这两种并发组件模型有如下特点:
1. Akka Actors :接收任意对象的消息,通过邮箱排队方式。这些消息被一个公共接口被明确管理和定位
2.无态会话bean: 暴露异步方法,在应用服务器中执行,由容器管理其生命周期管理。
3.JMS消息Bean: 接受处理来自JMS queue/topic的消息. 这些消息是容器管理的,类似会话Bean
这三者的共性都是来自一个线程池的线程异步执行,能够依次访问同一个实例。
Gerald使用了三个模式总结这三个类型:
1.本地单向异步请求Local One-Way Asynchronous Request:
从请求者发送一个异步请求到应答者,应答者不会回应。
2.超越上下文的异步请求Request Asynchronous Out-of-Context Request ,请求者发送一个消息给响应者,响应者发回返回消息,当请求者接受到响应以后必须重新建立上下文。
3.上下文内的异步外请求Request Asynchronous In-Context Request 当返回消息被请求者接受后,当时的上下文也被保留下来。
具体Actors模型讲解:http://www.jdon.com/actors.html
点按标题查看该英文PDF,文档中使用Scala代码演示了Actors和无态Bean以及MDB的三种模式实现。
总结:三种方法都使用线程池,并能够垂直和水平缩放,重要的差异体现在:异常处理,主管策略和事务处理。