`

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,一个广泛使用的开源关系型数据库管理...

    play2.0 for java developers.pdf

    集成Akka - **设置Actor并调度异步任务** - Akka是一个高性能、高可用性的工具包,用于构建并发系统。 ##### 12. 国际化 - **消息外部化和i18n** - 支持多语言应用,实现文本的国际化。 ##### 13. 应用Global...

    play2-riak:用于播放框架 2.0 的 riak 2

    `play2-riak` 是一个专门为 Play Framework 2.0 设计的 Riak 集成模块。Riak 是一个分布式键值存储系统,常用于构建高可用性和可扩展性的数据存储解决方案。Play Framework 是一个用 Java 和 Scala 开发的现代、敏捷...

    play-scala-service-example:带有Macwire端点Akka类型的播放服务

    【标题】"play-scala-service-example: 带有Macwire端点Akka类型的播放服务"揭示了这个项目是基于Scala语言,使用Play框架构建的一个服务示例,它结合了Akka类型和Macwire依赖注入工具。这个项目可能是为了演示如何...

    org.apache.servicemix.bundles.spring-test-3.2.8.RELEASE_2.zip

    Play Framework是一个开源的Web应用框架,使用Scala和Java编写,基于Akka actor模型并遵循MVC(模型-视图-控制器)架构模式。在Play 2.x版本中,"可堆叠控制器"是一种设计模式,允许开发者通过叠加多个控制器动作来...

    maintain-lead-trustee-frontend

    项目可能使用现代前端框架(如React或Angular)和Scala后端框架(如Play Framework或Akka HTTP)来构建。开发人员可能会使用Git进行版本控制,持续集成/持续部署(CI/CD)工具如Jenkins或Travis CI来自动化构建和...

    slick增删该查

    《Slick:数据库操作的全面解析》 在Java和Scala的开发环境中,Slick是一个强大...在实际项目中,Slick不仅可以简化数据库交互,还可以与其他Scala框架无缝集成,如Akka和Play Framework,构建出高效稳定的后端服务。

    hr-scala:我的hr版本,已移植到scala

    此外,项目可能使用了诸如`Play Framework`或`http4s`这样的Web框架来构建RESTful API,或者使用`Slick`作为数据库访问层。 对于想要学习Scala或提升人力资源系统开发技能的开发者来说,`hr-scala`项目提供了一个...

Global site tag (gtag.js) - Google Analytics