`
bit1129
  • 浏览: 1069780 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Akka一】Akka入门

    博客分类:
  • Akka
 
阅读更多

什么是Akka

Message-Driven Runtime is the Foundation to Reactive Applications

In Akka, your business logic is driven through message-based communication patterns that are independent of physical locations. Whether your Actors live on the same thread, a different machine, or a different datacenter—the semantics are the same. You focus on the business logic while Akka handles the lower level plumbing to give your applications Reactive characteristics:

Resilience.
Resilience is a core tenet of Reactive applications, yet is often the most overlooked. With Akka, you get resilience for free as part of the model. Akka provides fault-tolerance based on supervisor hierarchies. Every Actor can create other Actors, which it will then supervise, making decisions if they should be resumed, restarted, retired or if the problem should be escalated. Instead of trying all things possible to prevent an error from happening, this approach lets you embrace the reality of unplanned errors. It means you can adopt a pragmatic ‘Let It Crash’ philosophy, with the confidence that the impacted components will be reset to a stable state and restarted upon failure.

Simpler Concurrency
Threads and non-blocking I/O are complex and error-prone to build by hand, which means they waste your time. With Akka's implementation of the Actor concurrency model, you are freed to focus on your application's business logic and let Akka think about scaling up.

Scalability and Elasticity
Scale out on multicore servers and multiple nodes using Akka makes application elasticity and true scale on demand a reality. On commodity hardware, you might run several million Actors—a huge step up from mere thousands of threads in a traditional Java application.

Scala & Java APIs
In keeping with the pragmatism of the rest of the Typesafe Reactive Platform, Akka has a APIs for both Java and Scala. This means smooth interoperability, and no need to learn or adopt Scala at all. Akka can run standalone on a JVM or deployed in your existing Java Application Server

 

 

 

In Akka, a Future is a data structure used to retrieve the result of some concurrent operation. This operation is usually performed by an Actor or by the Dispatcher directly. This result can be accessed synchronously (blocking) or asynchronously (non-blocking).

 

开发环境:

1. Intellij Idea创建Scala项目,此时默认添加了Scala Library

2. 添加Akka依赖:

http://central.maven.org/maven2/com/typesafe/akka/akka-actor_2.10/2.3.9/akka-actor_2.10-2.3.9.jar

http://central.maven.org/maven2/com/typesafe/config/1.2.1/config-1.2.1.jar

 

 

 

Akka Actor间异步通信

package akka.examples

import akka.actor.{ActorSystem, Props, Actor}

case object Goodbye

class HelloActor(name: String) extends Actor {
  def receive = {
    case "Hello" => println("Hello from %s".format(name))
    case Goodbye => println("Goodbye")
    case _ => println("%s, huh?".format(name))
  }
}

object HelloAkka {
  def main(args: Array[String]) {
    val system = ActorSystem("HelloSystem")
    // 如果HelloActor不带构造参数,这可以这么使用
    // val helloActor = system.actorOf(Props[HelloActor], name = "helloactor")
    // HelloActor带构造参数的
    val actor = system.actorOf(Props(new HelloActor("Jimmy")), name = "helloactor")
    actor ! "Hello"
    actor ! Goodbye
  }
}

 

 

Akka Actor间同步通信

package akka.examples

import java.util.concurrent.TimeoutException

import akka.actor._
import akka.actor.{Props, ActorSystem, Actor}
import akka.pattern.ask
import akka.util.Timeout
import scala.concurrent.duration._

import scala.concurrent.Await
import scala.concurrent.Future

case object Who

case object AnswerTimeout

class AnswerActor extends Actor {
  override def receive: Receive = {
    case Who => sender ! "Tom"
    case AnswerTimeout => {
      Thread.sleep(1000 * 10);
      sender ! "Answer time out"
    }
    case _ => sender ! "Not supported question"
  }
}

object AkkaFuture {

  def main(args: Array[String]) {
    val system = ActorSystem("QASystem")
    val answerActor = system.actorOf(Props(new AnswerActor), name = "answerActor")


    //1. 使用?同步发送请求, future等待
    implicit val timeout = Timeout(5 seconds)
    val future1 = answerActor ? Who
    val r1 = Await.result(future1, timeout.duration).asInstanceOf[String]
    println(r1)

    //2. 同步请求超时
    val future2 = answerActor ? AnswerTimeout
    try {
      val r2 = Await.result(future2, timeout.duration).asInstanceOf[String]
      println(r2)
    } catch {
      case e: TimeoutException => println(e.getMessage)
    }

    //通过ask方法发送同步等待消息
    val future3: Future[String] = ask(answerActor, "RocketQuestion").mapTo[String]
    val result3 = Await.result(future3, 5 second)
    println(result3)

    system.shutdown()
  }
}

 

 

参考://http://doc.akka.io/docs/akka/snapshot/scala/futures.html#futures-scala

 

 

分享到:
评论

相关推荐

    akka学习入门实践

    ### Akka 学习入门实践知识点详解 #### 一、Akka 概述 - **定义**:Akka 是一个用于构建高度并发、分布式、容错性应用的工具包,适用于 Java 和 Scala 开发者。它基于 Actor 模型,支持响应式编程范式。 - **目标**...

    Akka入门与实践

    Akka 是一 个强大的工具集,提供了很多选项,可以对在本地机器上处理或网络远程机器上处理的 某项工作进行抽象封装,使之对开发者不可见。本书将介绍各种概念,帮助读者理解 网络上各系统进行交互的困难之处,并介绍...

    akka入门实践.zip

    Akka是用于在JVM上构建高并发、分布式和容错事件驱动应用程序的工具包和运行时环境。 Akka可以与Java和Scala一起使用。Actor是Akka的执行单位... Actor模型是一种抽象,可以更容易地编写正确的并发,并行和分布式系统。

    Akka应用模式-分布式应用程序设计实践指南.pdf

    另外,本书介绍了 Actor 模型的一个实现框架 Akka 以及它的工具,而后讨论了在充分利用 actor 架构的基础上使用 Akka 框架来设计软件系统的方法,以及使用它来开发并发性和分布式应用程序的方怯。本书还介绍了领域 ...

    Java的Akka学习入门文档

    Java的Akka学习入门文档是针对那些希望深入了解和掌握分布式计算技术的开发者设计的。Akka,由Lightbend公司开发,是一个强大的、基于actor模型的框架,它为构建高度可伸缩、容错和反应式的Java及Scala应用程序提供...

    akka集群操作入门(scala版本).rar

    附件里是我写的利用scala语言对akka集群操作的入门例子,包含了akka cluster 节点启动、节点注册、节点剔除、节点通信等功能,亲测可用。附件里共有两个文件,一个为scala编写的操作源代码,一个为相关的资源文件。

    Akka 基础学习pdf中文文档

    Akka 是一 个强大的工具集,提供了很多选项,可以对在本地机器上处理或网络远程机器上处理的 某项工作进行抽象封装,使之对开发者不可见。本书将介绍各种概念,帮助读者理解 网络上各系统进行交互的困难之处,并介绍...

    akka框架,应用于scala

    至于"akka-quickstart-scala"这个文件,很可能是Akka的Scala快速入门示例,其中可能包含了如何创建和交互Actor、配置Actor系统、处理消息以及实现简单的并发和分布式应用的代码示例。通过学习和实践这些示例,开发者...

    Akka Java文档

    通常,Akka 的入门教程会以一个简单的 HelloWorld 示例开始。这个示例展示了如何创建 Actor、发送消息以及处理消息的基本流程。例如: ```java import akka.actor.ActorSystem; import akka.actor.AbstractActor; ...

    Akka Scala 学习高清原版pdf

    Akka是一个用Scala和Java编写的库,用于构建并发、分布式以及容错的事件驱动应用。Akka框架借鉴了Erlang的并发模型,但它是建立在JVM之上,并且提供了丰富的抽象和工具,能够简化开发工作。 标题“Akka Scala 学习...

    akka的教学

    **Akka** 是一个为构建高并发、分布式和容错系统而设计的工具包和运行时环境。本教学内容将详细介绍 Akka 的基本概念、核心功能以及如何在 Java 中使用 Akka 来构建强大的应用程序。 ##### 1.1 什么是 Akka? Akka ...

    akka 2.0 文档

    通过以上对 Akka 2.0 文档的深入分析,我们可以看出 Akka 不仅是一个强大的并发框架,更是一整套用于构建高度分布式系统的解决方案。无论是对于初学者还是有经验的开发者来说,Akka 都是一个值得深入研究的技术。

    Akka官方开发文档

    入门指南部分会指导开发者如何开始使用Akka进行项目构建,可能包括安装Akka库、创建第一个actor、配置actor系统等基础步骤。 1.5用例和部署场景 这部分讨论了Akka应用的典型使用场景和部署方式,能够帮助开发者了解...

    Introduction and practice of akka

    Akka入门与实践作者在工作中有很多使用Java 8 和Scala 来编写Akka 应用程序的经验,但是在编 写本书的过程中,学到了很多更深入的Akka 细节。这本书很好地介绍了为什么要使用 Akka,以及如何使用Akka,并且展示了...

    Akka scala

    Akka是一个开源框架,它基于Actor模型,并通过使用Scala和Java编程语言提供了一种新的方法来构建并发和分布式系统。Akka的核心是Actor模型,这种模型允许开发者通过消息传递来构建并行处理单元,从而避免了复杂的...

    akka-2.3.14.doc

    对于初次接触Akka的开发者来说,可以从官方文档开始学习,文档中包含了安装指南、快速入门教程等。另外,社区资源也非常丰富,包括博客文章、视频教程等,这些都是非常好的学习材料。 **1.4 必不可少的“Hello ...

    akka Essentials

    这个标题提示我们本文将涉及Akka的核心概念、基础操作和实际应用方法,是入门和构建基于Akka的应用程序的实用指导。 描述部分提到Akka是一个在Scala语言中使用,并且在并发处理方面具有高性能特性的框架。这一描述...

    akka-java-sample:Akka Java快速入门示例

    Akka是一个基于Actor模型的高性能、高并发框架,主要应用于Scala和Java平台。由Lightbend公司(前身为Typesafe)开发,它提供了构建分布式系统和容错应用程序的强大工具。Akka的核心设计理念是通过Actor模型来简化多...

    netty-akka-template:带有Netty和Akka的入门Websocket服务器

    描述简单明了,"带有Netty和Akka的入门Websocket服务器"意味着这个项目旨在为初学者提供一个起点,展示如何利用Netty和Akka构建WebSocket服务器。WebSocket是一种在单个TCP连接上进行全双工通信的协议,常用于实时...

    Akka Actor Tutorial代码

    `ActorDemo`可能是Akka官方提供的一个快速入门示例,它可能包含了创建简单的Actor、发送消息、处理消息等基本操作。通过分析和运行这个示例,你可以更好地理解Akka Actor的工作原理。 总的来说,Akka Actor提供了一...

Global site tag (gtag.js) - Google Analytics