#与Akka集成
akka使用Actor模型,提高抽象层次,并提供一个更好的平台,建立正确的并发和可伸缩的应用程序。
对于容错,它采用“让崩溃模式,该模型已在电信业的巨大成功,主要用于建立自我修复 - 系统永不停止的应用程序。
Actor模型也为分布式传输和真正可扩展、可容错应用的基础提供了抽象。
1.应用程序Actor系统
akka2.0能够在若干个被称作Actor系统的容器上工作。Actor系统管理为了运行它包含的Actors的配置资源。
一个Play应用定义了一个特殊的actor系统,用来让应用使用。这个actor系统跟随应用的生命周期,当应用程序重启时,它会自动重启。
Play并不反对你在Play应用中使用另外的actor系统。Play默认的actor系统仅仅是一个启动几个actor的便捷方式,而不需要设置你自己的actor系统。
同play.libs.Akka助手可以访问默认的应用程序actor系统:
ActorRef myActor = Akka.system().actorOf(new Props(MyActor.class));
2.配置
默认的actor系统的配置从Play的配置文件中读取。例如,在conf/application.con中加入如下几行,可以配置应用程序actor系统的默认Dispatcher(转发器)。
akka.default-dispatcher.core-pool-size-max = 64
akka.debug.receive = on
3.将Akka的Future转换为Play的Promise
当你与Akka进行异步交互的时候,我们会得到Future对象,你可以使用play.libs.Akka.asPromise()提供的转换方法轻易地将它转换为Play的Promise。
import static akka.pattern.Patterns.ask;
import play.libs.Akka;
import play.mvc.Result;
import static play.mvc.Results.async;
import play.libs.F.Function;
public static Result index() {
return async(
Akka.asPromise(ask(myActor,"hello", 1000)).map(
new Function<Object,Result>() {
public Result apply(Object response) {
return ok(response.toString());
}
}
)
);
}
3.异步执行代码块
Akka的一个普通用例是当有一些并发执行的计算时,不需要actor的额外工具。
如果你发现你创建以一个Actor池的理由是为了进行并行计算,那么这里有更加简单快速的方式:
import static play.libs.Akka.future;
import play.libs.F.*;
import java.util.concurrent.Callable;
public static Result index() {
return async(
future(new Callable<Integer>() {
public Integer call() {
return longComputation();
}
}).map(new Function<Integer,Result>() {
public Result apply(Integer i) {
return ok("Got " + i);
}
})
);
}
4.一部任务调度
你可以调度发送消息给actors,并且执行任务(函数或者Runnable实例)。你会得到一个可撤销的返回,你可以调用撤销的回调来取消调度操作的执行。
举个例子,没30秒向testActor发送一个消息:
Akka.system().scheduler().schedule(
Duration.create(0, TimeUnit.MILLISECONDS),
Duration.create(30, TimeUnit.MINUTES)
testActor,
"tick"
)
另一个例子,从现在起10秒后执行一个代码块:
Akka.system().scheduler().scheduleOnce(
Duration.create(10, TimeUnit.SECONDS),
new Runnable() {
public void run() {
file.delete()
}
}
);
分享到:
相关推荐
此外,Play框架与Akka框架紧密集成,提供非阻塞I/O和异步处理能力,提升了应用的性能和响应速度。 在创建“Play留言板”应用时,我们首先要配置数据库连接。这里使用的是MySQL,一个广泛使用的开源关系型数据库管理...
注:下文中的 *** 代表文件名中的组件名称。 # 包含: 中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 ...
### Play2.0 for Java Developers #### 概述 Play2.0是一个现代的Web应用框架,它基于Java和Scala语言构建,旨在提供简洁、快速且可扩展的应用开发体验。对于Java开发者而言,Play2.0提供了一套完整的Java API,...
基于scala 、akka实现了一个简单的报表工具。该项目是个玩具项目,用于个人学习scala和akka。使用scala语言开发,基于akka-http, akka-stream,akka-cluster等新...流控 Back-Pressure, 避免OutOfMemory(akka-stream).
play-akka-cluster-websocket-chat 基于 Play Framework 2 (Java) 和 Akka 集群的多房间可扩展聊天这个集成 play 框架 2 应用程序(java)与 akka 集群的示例。 它提供了为规模系统添加新的播放节点的可能性。 当一...
在 "play-akka-hello-world" 项目中,我们能看到如何在 Play 应用中使用 Akka actors。通常,Play 会配置一个 ActorSystem,它是 Akka 的入口点,管理所有 Actor 的生命周期。然后,定义 Actor 类并实现其行为,这...
activator-akka-docker, 如何在 Docker 中运行akka群集 Akka & Docker有关详细描述,请阅读这里博客条目。sbt docker:publishLocaldocker run --name seed-1 akka-docker:2.3.4 --seeddoc
2. **异步编程**:Play Framework基于Akka框架,支持非阻塞I/O和异步处理,提高了Web应用的并发性能。 3. **路由系统**:Play Framework的路由文件定义了URL到Action的映射,允许开发者灵活地控制请求处理逻辑。 4...
- **非阻塞 I/O**:Play Framework 基于 Akka 框架实现了非阻塞 I/O,这使得在处理大量并发请求时无需担心性能瓶颈问题。本书会详细介绍如何利用这一特性构建高并发的应用程序。 - **模块化架构**:该框架支持模块化...
#spring-boot-akka-java 一个使用 Java 8 的涉及 Spring Boot 和 Akka 的 Web 应用程序 前言 作为初学者,我发现将 Akka 与 Spring 的依赖注入集成有点复杂,尤其是在我使用 Java 时。 这个应用程序是向前迈出的一步...
4. **异步I/O**:Play 使用Akka框架实现非阻塞I/O,可以处理大量的并发请求,适合构建高并发的Web应用。 5. **RESTful API支持**:Play 鼓励开发者使用HTTP协议的特性来构建应用程序,便于构建服务化和微服务化的...
Play-Utils 模块是为 Play Framework 设计的一个强大且实用的工具集合,它极大地提升了开发者在使用 Play Framework 进行 Java Web 开发时的效率和便利性。Play Framework 是一个开源的、基于 MVC(模型-视图-控制器...
- **与 Akka 集成**:Akka 是一个用于构建高度并发、分布式和容错系统的工具包,文档解释了如何将 Akka 集成到 Play 2.0 中。 - **国际化**:提供了多语言支持的方法,帮助开发者创建全球化应用。 - **全局对象**:...
克隆应用程序sbt new knoldus / swagger-ui-akka-http.g8 cd swagger-ui-akka-http /编译应用程序sbt clean编译运行应用程序sbt运行击中URI:localhost:8080 / swagger-ui / index.html模板许可证由Knoldus Inc在...
Swagger-akka-http-sample是一个基于Scala的项目,用于展示如何集成Swagger和Akka-HTTP来构建RESTful API。Swagger是一个流行的API开发工具,它提供了一种标准的方式来定义、设计、构建、文档化和测试API。Akka-HTTP...
`play-zipkin-tracing` 是一个项目,它专门用于为Play Framework和Akka这样的工具集添加Zipkin支持,实现分布式跟踪。Zipkin是一个流行的开源系统,用于收集服务间调用的时序数据,帮助开发者在复杂的分布式环境中...
ddd-leaven-akka-v2 遵循基于的方法,在和之上构建的示例电子商务应用程序。 概述 此示例电子商务系统具有一组独特的属性。 这是: React灵敏,有弹性,有弹性 :clapping_hands: , 整合了SOA,EDA和微服务架构 :...
Play Framework2是一个强大的Java和Scala应用开发框架,它以其简洁的API、快速的开发周期以及对Web标准的紧密集成而闻名。本教程旨在为初学者和有经验的开发者提供全面的指导,帮助他们掌握Play Framework2的核心...
`akka-play-scala-demo` 是一个基于 Akka、Play 和 Scala 的示例项目,它展示了如何在这些技术栈中构建高效、可扩展的Web应用程序。Akka 是一个用于构建高度并发、分布式和反应式应用的框架,而 Play 是一个用于构建...