GMTC北京站本周日开幕,58个议题全部上线,点击查看 了解详情
写点什么

从高层次并发角度比较 AkkaActor 和 JavaEJB

2014 年 3 月 05 日

从架构原理和编码风格方面比较 Akka Actor 和 Java EE 7 EJB ,尤其是无状态会话 Bean 和 JMS 消息驱动 Bean,既有共同点,如三种类型都支持垂直和水平扩展。又有不同点,例如对异常和事务的处理方面。这是 Gerald Loeffler 博士在最近的一次介绍性讲座中,从高层次并发角度解释和比较这三种方式后作出的总结。

Gerald 是一名高级集成架构师,在此次讲座中,他将高层次并发定义为一种编程范式,在组件级别处理并发,并且要尽可能地向上抽象,使其与处理单个线程或任务以及向线程池提交等具体操作解除耦合。

他围绕着 Active Object 设计模式思想展开演讲,该模式与传统设计模式相对独立,但是思想是相同的。演讲中的案例使用 Scala 语言,但是他认为所讲内容 Java 也适用。

对于 Gerald 来说,从 Active Object 角度,有一个简单的心智模型:

  • Akka Actor接收任意对象形式的消息,并以队列形式存储在邮箱中。通过统一的接口分别管理和定位这些消息。
  • 无状态会话 Bean暴露在应用服务器中执行的异步方法,由容器控制其生命周期。
  • JMS 消息驱动 Bean从 JMS 队列 / 主题中接收和处理预定义类型的消息。和会话 Bean 类似,该类型的 Bean 也由容器管理。

这三种类型的相同点是由线程异步执行,线程一般从线程池中获取,对同一个实例顺序访问。

Gerald 使用以下三种模式对这三种类型进行了比较,并配有相应的代码案例:

  • 本地单向异步请求,请求者向响应者发送异步请求,而响应者不会响应请求。
  • 请求异步上下文外请求,请求者向响应者发送消息,响应者响应请求并返回消息,请求者接收到消息后需要重建上下文。
  • 请求异步上下文内请求,当接收返回消息时,请求者通过某种方式已经保存了上下文。

最后,Gerald 简短地总结了这三种类型的相同点,如三种类型都使用线程池,支持垂直和水平扩展,以及不同点,如异常处理,监督策略和事务处理。

Akka 是一款开源工具包和运行环境,用于在 JVM 中构建并发和事件驱动型应用。 企业Java Bean ,即EJB,是Java EE 标准的一部分,目前版本是 Java EE 7

查看英文原文: Akka Actors vs. Java EJBs from a High-Level Concurrency Perspective


感谢邵思华对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014 年 3 月 05 日 05:261979
用户头像

发布了 28 篇内容, 共 69415 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

为什么 Python 的 f-string 可以连接字符串与数字?

Python猫

Python 开源 编程语言 后端 C语言

程序员如何技术划水,Android项目开发如何设计整体架构?Android岗

欢喜学安卓

android 程序员 面试 移动开发

日记 2021年2月20日(周六)

Changing Lin

2月春节不断更

构建万物可信互联的基石,带你深度剖析区块链跨链的关键技术,满满是干货!

华为云开发者社区

区块链 智能合约 云原生 跨链技术 分布式账本技术

滴滴内部分享:如何提高代码的可读性,学习笔记

Java架构师迁哥

ZEGO全新语音聊天解决方案,4步搭建爆火的语音聊天室

ZEGO即构

Spring Boot(一):入门篇

海鸥云

spring Boot Starter

go get下载包失败问题

happlyfox

golang Proxy 28天写作

大厂面试:求解集装箱港口翻箱问题的最短路径

华为云开发者社区

算法 路径 模型

安卓软件开发!Android线程池基础入门和简单实践以及使用技巧,面试真题解析

欢喜学安卓

android 程序员 面试 移动开发

诊所数字化:搭建网络路径的信息铺设策略

boshi

数字化转型 医疗 七日更 28天写作

新手如何靠区块链赚钱?

CECBC区块链专委会

区块链

Linux 多线程详解 —— 什么是线程

赖猫

Linux 线程 Linux内核

SICP 习题答案1.1 - 1.5

十元

在gradle中构建java项目

程序那些事

Java maven Gradle 程序那些事 构建工具

工作日志2-19

一锅水端平

Kafka.02 - Topic 介绍

insight

kafka 2月春节不断更

一次并发插入死锁带来的“教训”,我才清楚这些MySQL锁知识

互联网架构师小马

追根溯源,有点意思,关于MySQL更新“丢失”问题

互联网架构师小马

熟练HTML5+CSS3,每天复习一遍

魔王哪吒

面试 前端 28天写作 2月春节不断更

《TestNG》源码学习笔记

吴大山

week12 作业

zbest

LeetCode题解:53. 最大子序和,动态规划,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

产品经理问我:手动创建线程不香吗,为什么非要用线程池呢?

Java鱼仔

线程池 Java 8

数据库的两个好帮手:pagehack和pg_xlogdump

华为云开发者社区

数据库 故障 GaussDB pagehack pg_xlogdump

区块链在医疗领域应用所要面临哪些挑战

CECBC区块链专委会

区块链 医疗

区块链产品走向普及之不完全指南

CECBC区块链专委会

比特币 区块链

实习记录:PB协议编写

是鱼头啊啊啊

AI窥人(三):你想靠AI实现永生吗?

脑极体

都在说云原生,它的技术图谱你真的了解吗?

浪潮云

云原生

我要看 SICP 了!

十元

从高层次并发角度比较AkkaActor和JavaEJB-InfoQ