akka学习教程(一)简介

akka系列文章目录

为什么要用akka

Akka提供可扩展的实时事务处理。

Akka是一个运行时与编程模型一致的系统,为以下目标设计:

  • 垂直扩展(并发)
  • 水平扩展(远程调用)
  • 高容错

在Akka的世界里,只有一个内容需要学习和管理,具有高内聚和高一致的语义。

Akka是一种高度可扩展的软件,这不仅仅表现在性能方面,也表现在它所适用的应用的大小。Akka的核心,Akka-actor是非常小的,可以非常方便地放进你的应用中,提供你需要的异步无锁并行功能,不会有任何困扰。

你可以任意选择Akka的某些部分集成到你的应用中,也可以使用完整的包——Akka 微内核,它是一个独立的容器,可以直接部署你的Akka应用。随着CPU核数越来越多,即使你只使用一台电脑,Akka也可作为一种提供卓越性能的选择。 Akka还同时提供多种并发范型,允许用户选择正确的工具来完成工作。

使用akka带来的好处

  • AKKA提供一种Actor并发模型,其粒度比线程小很多,这意味着你可以在项目中使用大量的Actor。
  • Akka提供了一套容错机制,允许在Actor出错时进行一些恢复或者重置操作
  • AKKA不仅可以在单击上构建高并发程序,也可以在网络中构建分布式程序,并提供位置透明的Actor定位服务

Actor

actor是akka执行的基本单元,比线程更轻量级,使用akka可以忘掉线程了。事实上,线程调度已经被akka封装。

actor生命周期

消息投递

  • 这个akka应用是有消息驱动的,消息是除了actor之外最重要的核心组件。在actor之前投递消息应该满足不可变性,也就是不便模式
  • 消息投递有3种策略:之多一次投递,至少一次投递,精确的消息投递。BUT ,没必要在akka层面保证消息的可靠性,一般在业务层在保证
  • akka可以在一定程度上保证顺序性,但不具备传递性,见《java高并发程序设计 P295》

模块

Akka的模块化做得非常好,它为不同的功能提供了不同的Jar包。

  • akka-actor-2.0.jar – 标准Actor, 有类型Actor,等等
  • akka-remote-2.0.jar – 远程Actor
  • akka-slf4j-2.0.jar – SLF4J事件处理监听器
  • akka-testkit-2.0.jar – 用于测试Actor的工具包
  • akka-kernel-2.0.jar – Akka微内核,可运行一个基本的最小应用服务器
  • akka--mailbox-2.0.jar – Akka可容错邮箱

要查看每个Akka模块的jar包依赖见 依赖 章节. 虽然不重要不过akka-actor 没有外部依赖 (除了scala-library.jar JAR包).

我该如何使用和部署 Akka?

Akka 可以有几种使用方式:

  • 作为一个库: 以普通jar包的形式放在classpath上,或放到web应用中的 WEB-INF/lib位置
  • 作为一个独立的应用程序,使用 Microkernel(微内核),自己有一个main类来初始化Actor系统

参考资料

  • 11
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
### 回答1: 在 Akka 中,每个 actor 都有一个邮箱,用于接收和存储消息。你可以将 Akka 的邮箱比作真实世界中的邮箱:每个人都有自己的邮箱,当有人给你写信时,就会把信放到你的邮箱里。 下面是一个使用 Akka 的邮箱的简单案例: 首先,我们需要创建一个 actor 类型,用于接收和处理消息。在这个例子中,我们创建了一个名为 `MyActor` 的 actor,它接收字符串消息并将其打印到控制台。 ```scala import akka.actor.Actor class MyActor extends Actor { def receive = { case s: String => println(s) } } ``` 接下来,我们需要创建一个 actor 系统,用于管理 actor。在这个例子中,我们创建了一个名为 `MyActorSystem` 的 actor 系统,并在其中创建了一个名为 `myActor` 的 `MyActor` 实例。 ```scala import akka.actor.ActorSystem val system = ActorSystem("MyActorSystem") val myActor = system.actorOf(Props[MyActor], name = "myActor") ``` 最后,我们可以向 `myActor` 发送消息。这些消息将被存储在 `myActor` 的邮箱中,并在 `myActor` 处理它们时被处理。 ```scala myActor ! "Hello, World!" myActor ! "Hello again!" ``` 这就是使用 Akka 的邮箱的简单案例。通过使用 actor 和 actor 系统 ### 回答2: Akka是一个用于构建可扩展的并发应用程序的开源工具包。在Akka中,信箱是一个重要的概念,它被用来传递和接收消息。 下面是一个简单的Akka邮箱案例: 假设我们有一个名为Email的类,它包含了发送和接收邮件所需要的信息,例如发件人、收件人和邮件内容。我们希望使用Akka实现一个简单的邮件系统,其中包含一个邮箱Actor和多个客户端Actor。 首先,我们创建一个名为Mailbox的Actor。该Actor负责接收邮件,并将其存储在一个邮箱中。它还可以提供一些方法,例如获取最新的邮件、删除已读邮件等。Mailbox Actor可以使用Akka的mailbox模块来处理消息队列。 然后,我们创建多个客户端Actor,每个客户端Actor代表一个用户。当一个客户端Actor想要发送一封邮件时,它会将邮件消息发送给Mailbox Actor。Mailbox Actor会将邮件存储在邮箱中,并返回一个表示邮件发送成功的响应消息给客户端Actor。 客户端Actor可以使用Mailbox Actor提供的方法来获取未读邮件、删除已读邮件、标记已读邮件等。当客户端Actor获取到邮件时,它可以执行一些操作,例如显示邮件内容或者将邮件保存到本地。 整个系统的工作流程如下: 1. 创建Mailbox Actor,并启动它。 2. 创建多个客户端Actor,并启动它们。 3. 客户端Actor发送一封邮件给Mailbox Actor。 4. Mailbox Actor将邮件存储在邮箱中,并返回发送成功的响应消息给客户端Actor。 5. 客户端Actor可以使用Mailbox Actor提供的方法来获取未读邮件、删除已读邮件等。 6. 客户端Actor执行相应的操作,例如显示邮件内容或者保存邮件到本地。 这是一个非常简单的Akka邮箱案例。通过这个案例,我们可以了解到Akka中如何使用Actor和消息传递来实现一个简单的邮箱系统。当然,在实际应用中,可能会有更多的功能和复杂性。 ### 回答3: Akka是一种用于构建并发、分布式、可容错应用程序的开源工具包。在Akka中,有一个重要的概念是Actor,它是一个轻量级的执行单元,可以并发地执行任务并与其他Actor进行通信。 在一个使用Akka的邮箱案例中,我们可以模拟一个简单的邮箱系统。这个邮箱系统有多个角色,包括发送邮件的人、接收邮件的人和邮箱服务器。每个角色都是一个Actor,并且彼此之间通过消息进行通信。 首先,我们创建一个名为"EmailSender"的Actor,用于发送邮件。每个发送者Actor都有一个接收邮件者Actor的引用,并可以向接收者发送邮件。 其次,我们创建一个名为"EmailReceiver"的Actor,用于接收邮件。每个接收者Actor都有一个邮箱,可以接收来自发送者的邮件。 最后,我们创建一个名为"EmailServer"的Actor,用于处理发送者和接收者之间的通信。当发送者发送邮件时,它将把邮件发送给服务器Actor,并由服务器Actor将邮件传递给接收者Actor。 在这个案例中,我们可以使用Akka提供的Actor模型来实现并发和消息传递。我们可以在邮件发送者Actor中定义发送邮件的行为,包括选择接收者Actor并发送邮件。接收者Actor中的行为可能包括接收和存储邮件。服务器Actor可以协调发送者和接收者之间的消息传递。 这个简单的邮箱案例只是Akka的一个应用示例,它展示了Akka的基本概念和用法。在实际应用中,我们可以根据需求进行更复杂的设计和实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐崇拜234

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值