一般规则
关于消息发送,有两条基本规则:
- 最多一次,即不保证消息传递可靠性
- message ordering per sender–receiver pair
消息传递机制
- 最多一次,意味消息有可能丢失
- 最少一次,保证消息传递可靠,但可能冗余
- 保证只成功一次,性能最差,消息成功传递,不冗余
为什么不保证传递可靠性
问题是,我们要保证消息传递在什么环节可靠:
- 消息已经发到网络上了?
- 消息被远程主机接收到了?
- 消息已经在接收者actor的邮箱里了?
- 目标actor是否能处理这个消息?
- 消息在目标actor上开始处理了?
- 消息在目标actor上已经处理完毕了?
上面每一条都有不同的挑战和成本。为什么不需要那么可靠?查看这篇文章
Akka拥抱分布式计算和分布式网络,并通过消息传递来明确实现它,因此它不说谎,而是模拟一个有漏洞的抽象方式。这是在Erlang中取得了重大成功的模型,并要求用户基于此为应用建模。你可以阅读Erlang 文档(10.9, 10.10)了解更多。Akka与它非常相似。
底线:你是一个开发者,知道你的应用中需要提供哪些保证,那么你可以飞快又可靠地使用专门的ACK和RETRY来实现(如果你真的需要,大多数情况你并不需要)。使用Akka的Durable邮箱会有帮助。
消息次序
Actor A1 发送消息 M1, M2, M3 给 A2 Actor A3 发送消息 M4, M5, M6 给 A2
意味着:
- 如果 M1 被投递了,那么它一定在 M2 和 M3之前被投递
- 如果 M2 被投递了,那么它一定在 M3之前被投递
- 如果 M4 被投递了,那么它一定在 M5 and M6之前被投递
- 如果 M5 被投递了,那么它一定在 M6之前被投递
- A2 收到 A1 的消息会与收到的 A3的消息交织在一起
- 因为没有投递保证,所以可能会“没有”,或有“一些”,或“全部”消息到达 A2
http://blog.csdn.net/wsscy2004/article/details/38421333
相关推荐
另外,本书介绍了 Actor 模型的一个实现框架 Akka 以及它的工具,而后讨论了在充分利用 actor 架构的基础上使用 Akka 框架来设计软件系统的方法,以及使用它来开发并发性和分布式应用程序的方怯。本书还介绍了领域 ...
1. **Actor模型**:Akka的核心是Actor模型,它是一种并发计算的抽象,每个Actor都是独立的工作单元,通过消息传递进行通信。理解Actor如何工作,以及它们如何与其他Actor交互,是学习Akka的基础。 2. **并发与并行*...
在Actor模型中,实体(即Actor)通过发送消息来进行交互,而无需共享内存,从而避免了竞争条件、死锁和并发修改等问题,极大提高了并发程序的可靠性和伸缩性。 2. Akka框架:Akka是一个基于Scala和Java语言开发的...
它基于Actor模型,这是一种并发计算的概念,将计算过程抽象为彼此独立的实体——Actor,这些实体通过传递消息进行通信,而不是共享状态,从而减少了竞态条件和死锁的可能性。 在Akka中,每个Actor都有自己的邮箱,...
读书笔记:Scala支持的著名的并发编程框架Akka的学习记录
### Akka 学习入门实践知识点详解 #### 一、Akka 概述 - **定义**:Akka 是一个用于构建高度并发、分布式、容错性...通过学习 Akka,开发者能够更加轻松地面对现代软件开发中的挑战,构建出既高效又可靠的分布式应用。
Akka笔记 Akka消息 文档 源代码 从 Akka记录 文档 源代码 从 Akka测试 文档 源代码 从 Akka消息传递请求和响应 文档 源代码 从arunma / AkkaMessagingRequestResponse分叉
2. **消息传递**:在Akka中,Actor之间的通信是通过消息传递实现的,这确保了线程安全。消息是不可变的,发送后不会被修改,降低了并发时的复杂性。消息传递有两种方式:同步(ask模式)和异步(tell模式)。 3. **...
读书笔记:以Scala带动对异步编程webflux、akka、pulsar、gRpc等框架学习
Akka ZIO应用 该项目的目的是将Akka Toolkit与ZIO一起使用,以构建高度并发,分布式和弹性消息驱动的应用程序 云 当地的 sbt run open http://0.0.0.0:8080
读书笔记:基于Akka编写的RPC通讯程序Demo以Scala为开发语言
**Akka 概述** Akka 是一个用 Scala 编写的开源框架,它提供了一种在 ...在学习过程中,你将遇到如 Actor 创建、消息传递、Actor 系统配置、故障处理和监控等相关知识点,这些都是理解和使用 Akka 必不可少的部分。
5. **消息传递**:在Akka中,Actor之间的通信是异步的,通过发送不可变的消息进行。消息是不可变的,这意味着一旦创建,就不能更改,这有助于保持系统的线程安全。 6. **Receive行为**:每个Actor都有一个或多个`...
Actor通过发送消息来交互,这种异步、非阻塞的消息传递方式确保了系统的高并发性和可扩展性。 **Actor** Actor是Akka中的基本构建块,它是一个轻量级的并发实体,有自己的状态并能处理消息。Actor之间的通信遵循...
2. **消息传递**:设计有效的消息协议,确保Actor之间的通信清晰、可靠。 3. **状态管理**:如何在Actor之间共享和同步游戏状态,同时保持数据的一致性。 4. **网络通信**:使用Akka的Remoting或Akka HTTP模块来...
这意味着,如果您在使用高级API实现某件事时遇到困难,则很有可能可以通过低级API完成该操作,这提供了更大的灵活性,但可能需要您编写更多的应用程序代码。 在了解更多。 文献资料 该文档可在,用于和 。 社区 您...
Actor是Akka中的基本单元,每个Actor都有自己的状态和行为,它们通过异步消息传递进行通信。 - **消息传递**:Actor之间的通信基于消息,确保了线程安全且无阻塞。消息传递是异步的,提高了系统的并行性。 - **...
第 3 章 传递消息:消息传递模式。 第 4 章 Actor 的生命周期—处理状态与错误:Actor 生命周期、监督机制、Stash/ Unstash、Become/Unbecome 以及有限自动机。 第 5 章 纵向扩展:并发编程、Router Group/Pool、...
- 消息传递可靠性,保证消息能够被准确地发送和接收。 - 位置透明性,这表明actor可以在不改变程序代码的情况下在分布式系统中移动。 - actor的分发器(Dispatchers)负责消息的负载均衡和调度。 - mailbox是...