`

Play framework 2.0 -集成AKKA

阅读更多

 

#与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()
	    }
	  }
	); 
 

 

1
1
分享到:
评论

相关推荐

    Play framework 2.0入门教程(四)的源代码,Play留言板(数据库版)

    此外,Play框架与Akka框架紧密集成,提供非阻塞I/O和异步处理能力,提升了应用的性能和响应速度。 在创建“Play留言板”应用时,我们首先要配置数据库连接。这里使用的是MySQL,一个广泛使用的开源关系型数据库管理...

    flink-rpc-akka-loader-1.14.3.jar中文-英文对照文档.zip

    注:下文中的 *** 代表文件名中的组件名称。 # 包含: 中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 ...

    play2.0 for java developers.pdf

    ### Play2.0 for Java Developers #### 概述 Play2.0是一个现代的Web应用框架,它基于Java和Scala语言构建,旨在提供简洁、快速且可扩展的应用开发体验。对于Java开发者而言,Play2.0提供了一套完整的Java API,...

    基于akka-http、akka-cluster、akka-stream 构建的报表工具

    基于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-akka-cluster-websocket-chat 基于 Play Framework 2 (Java) 和 Akka 集群的多房间可扩展聊天这个集成 play 框架 2 应用程序(java)与 akka 集群的示例。 它提供了为规模系统添加新的播放节点的可能性。 当一...

    play-akka-hello-world:展示 Akka 演员的基本 Play 框架项目

    在 "play-akka-hello-world" 项目中,我们能看到如何在 Play 应用中使用 Akka actors。通常,Play 会配置一个 ActorSystem,它是 Akka 的入口点,管理所有 Actor 的生命周期。然后,定义 Actor 类并实现其行为,这...

    activator-akka-docker, 如何在 Docker 中运行akka群集.zip

    activator-akka-docker, 如何在 Docker 中运行akka群集 Akka & Docker有关详细描述,请阅读这里博客条目。sbt docker:publishLocaldocker run --name seed-1 akka-docker:2.3.4 --seeddoc

    play framework api,play! framework api,play api

    2. **异步编程**:Play Framework基于Akka框架,支持非阻塞I/O和异步处理,提高了Web应用的并发性能。 3. **路由系统**:Play Framework的路由文件定义了URL到Action的映射,允许开发者灵活地控制请求处理逻辑。 4...

    Play Framework Cookbook

    - **非阻塞 I/O**:Play Framework 基于 Akka 框架实现了非阻塞 I/O,这使得在处理大量并发请求时无需担心性能瓶颈问题。本书会详细介绍如何利用这一特性构建高并发的应用程序。 - **模块化架构**:该框架支持模块化...

    spring-boot-akka-java:一个使用 Java 的涉及 SpringBoot 和 Akka 的 Web 应用程序

    #spring-boot-akka-java 一个使用 Java 8 的涉及 Spring Boot 和 Akka 的 Web 应用程序 前言 作为初学者,我发现将 Akka 与 Spring 的依赖注入集成有点复杂,尤其是在我使用 Java 时。 这个应用程序是向前迈出的一步...

    playframework中文教程.zip

    4. **异步I/O**:Play 使用Akka框架实现非阻塞I/O,可以处理大量的并发请求,适合构建高并发的Web应用。 5. **RESTful API支持**:Play 鼓励开发者使用HTTP协议的特性来构建应用程序,便于构建服务化和微服务化的...

    Play-Utils是一个专门为PlayFramework开发的实用工具包模块

    Play-Utils 模块是为 Play Framework 设计的一个强大且实用的工具集合,它极大地提升了开发者在使用 Play Framework 进行 Java Web 开发时的效率和便利性。Play Framework 是一个开源的、基于 MVC(模型-视图-控制器...

    Play 2.0 Documentation.pdf

    - **与 Akka 集成**:Akka 是一个用于构建高度并发、分布式和容错系统的工具包,文档解释了如何将 Akka 集成到 Play 2.0 中。 - **国际化**:提供了多语言支持的方法,帮助开发者创建全球化应用。 - **全局对象**:...

    swagger-ui-akka-http.g8:使用Akka Http API生成Swagger UI

    克隆应用程序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:演示使用swagger-akka-http的示例

    Swagger-akka-http-sample是一个基于Scala的项目,用于展示如何集成Swagger和Akka-HTTP来构建RESTful API。Swagger是一个流行的API开发工具,它提供了一种标准的方式来定义、设计、构建、文档化和测试API。Akka-HTTP...

    play-zipkin-tracing:使用Zipkin为Play Framework和Akka提供分布式跟踪

    `play-zipkin-tracing` 是一个项目,它专门用于为Play Framework和Akka这样的工具集添加Zipkin支持,实现分布式跟踪。Zipkin是一个流行的开源系统,用于收集服务间调用的时序数据,帮助开发者在复杂的分布式环境中...

    ddd-leaven-akka-v2:电子商务系统示例#微服务#Akka#React式DDD #CQRS

    ddd-leaven-akka-v2 遵循基于的方法,在和之上构建的示例电子商务应用程序。 概述 此示例电子商务系统具有一组独特的属性。 这是: React灵敏,有弹性,有弹性 :clapping_hands: , 整合了SOA,EDA和微服务架构 :...

    Play Framework2本教程

    Play Framework2是一个强大的Java和Scala应用开发框架,它以其简洁的API、快速的开发周期以及对Web标准的紧密集成而闻名。本教程旨在为初学者和有经验的开发者提供全面的指导,帮助他们掌握Play Framework2的核心...

    akka-play-scala-demo:akka-播放-scala-demo

    `akka-play-scala-demo` 是一个基于 Akka、Play 和 Scala 的示例项目,它展示了如何在这些技术栈中构建高效、可扩展的Web应用程序。Akka 是一个用于构建高度并发、分布式和反应式应用的框架,而 Play 是一个用于构建...

Global site tag (gtag.js) - Google Analytics