Akka 2:如何暂停消息处理?

2024-03-29

在我使用 Akka 掌握 Actor 模型的过程中,出现了很多问题。这是另一张。假设我们有一个 Actor,由于某些业务逻辑或可用资源,它必须在给定时间内停止处理消息。可能发生这种情况的情况可能是:

  • 节流。可能有一个发送电子邮件的 Actor,但被限制为每秒只能发送一封电子邮件。

  • Actor 可能会采用某种只能同时处理 x 消息的系统。这可能是一个 AsyncHttpClient,它有一个固定的线程池,我不想超载它。

  • 处理消息所需的某些外部资源不可用(阅读:外部 REST-API)

我的大脑很可能还没有为演员做好准备,我只需要一个提示,如何以演员的方式解决这些问题。


一般回答

参与者总是尽可能快地处理消息,处理意味着将消息从邮箱中取出并将其传递到参与者的行为中。因此,行为就是你的答案所在:在需要非名义行动的时期将其更改为更合适的东西。

节流

如果一个组件处理消息的速度低于消息生成的速度,它最终将不得不丢弃消息。要么使用有界邮箱,要么在前面安排一名经理,跟踪员工的进度,并在压力期间进入“回复负面结果”模式。

当参与者想要限制自己的输出速率时,请使用context.system.scheduler.

这应该回答你的前两点。

Recovery

在所需资源不可用期间,您有两种选择,具体取决于要求:在内部对消息进行排队,或进入“无序”回复模式。您还可以混合,即在一定的时间和空间限制下排队,并在达到限制时失败。

进一步的考虑

始终保持参与者处理的工作单元很小,以便参与者可以在其延迟要求内做出反应。后者可以非常宽松(不间断地运行数小时)或非常严格(必须以 kHz 速率处理消息)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Akka 2:如何暂停消息处理? 的相关文章

  • Akka-http:如何从请求中获取自定义标头?

    我在请求中将以下标头发送到我的 akka http api Content type application json Accept application json AppId some id 如何在我的 akka http 路由中获取
  • Akka/Java getContext().become 带参数?

    在 Akka Scala 中 可以将参数传递给自定义接收函数 因此可以通过 params 传递整个 actor 状态 而无需使用可变变量 context become myCustomReceive param1 param2 但在 Jav
  • 使用 ScalaTest 测试时,为什么 Akka 会失败并显示“IllegalStateException:在终止或终止时无法创建子项”?

    这是我从 Akka 收到的错误 debug Running TaskDef com suredbits core util time TimeUtilUnitTest org scalatest tools Framework anon 1
  • RemoteActor 取消注册 actor

    我正在玩 RemoteActors 现在我想知道 如果我关闭 RemoteActor 会发生什么 该 Actor 可通过 RemoteActor alive 和 RemoteActor register 来使用 我找不到两者的逆 活着和注册
  • 在 akka Receive 中保留类型信息

    是否可以在消息处理程序部分函数中保留类型信息 我有部分函数 eventHandler 通过某些特定参数匹配事件 def eventHandler Receive case event Event val matchingReactions
  • Akka TestProbe 测试 context.watch() / 终止处理

    我正在使用 TestKit 测试 akka 系统 我正在测试的系统的一个参与者在收到某种消息类型后 context watches 发送者 并在发送者死亡时自杀 trait Handler extends Actor override de
  • 考虑到可扩展性的基于组件的应用程序:OSGi 还是 Akka?

    在我的硕士论文中 我正在开发一个用于销售大型活动门票的应用程序框架 我的主要要求是可修改性 可扩展性和性能 我的客户 活动组织者 应该能够在运行时轻松替换组件并添加功能 此类组件的一个示例是座位分配组件 我的导师说看看 OSGi 松散耦合的
  • 在 Akka 中等待多个结果

    在 Akka 中等待多个 actor 结果的正确方法是什么 The 反应式编程原理 https www coursera org course reactiveCoursera 课程有一个使用复制键值存储的练习 在不详细讨论分配的细节的情况
  • 持久 Akka 邮箱和无损

    在 Akka 中 当一个 actor 在处理消息时死亡 内部onReceive 该消息丢失 有没有办法保证无损 有没有办法配置 Akka 始终保留消息before将他们发送到onReceive 以便在演员死亡时可以恢复并重播 也许像持久邮箱
  • Akka 的语言和产品替代品是什么?

    现在我正在看游戏框架 https www playframework com 并且非常喜欢它 Play 中提供的功能中最受宣传的部分之一是Akka http akka io 为了更好地理解 Akka 以及如何正确使用它 您能告诉我其他语言或
  • Akka 2.1.2 Scheduler 出现问题(“系统”无法识别)

    根据这些示例 我试图运行一个非常简单的循环函数循环 http doc akka io docs akka 2 1 2 scala scheduler html http doc akka io docs akka 2 1 2 scala s
  • 如何每天在特定时间触发 akka 调度程序?

    我创建了一个 Akka 的调度程序 每天在固定时间发送邮件 例如每天上午 6 00 那么如何称呼演员呢 我的意思是我应该使用什么逻辑 谢谢 只需计算现在和接下来的下午 6 点之间的差异 将其作为初始延迟 然后每 24 小时重复一次
  • 控制 Akka 中消耗大量内存的 actor 的生成

    我使用 akka 的 actor 模型构建了一个分布式流机器学习模型 通过向 Actor 发送训练实例 训练数据 来异步训练模型 对这些数据的训练会占用计算时间并改变参与者的状态 目前我正在使用历史数据来训练模型 我想运行一堆不同配置的模型
  • Scala.2.10.1 的标准库还是 Akka?

    我要使用Futures and Promises from scala concurrentScala 中的包2 10 1 我应该使用Akka反而 Akka future 和 Promise 在 2 10 中被移入 Scala 标准库 所以
  • Akka 流如何不断实现?

    我在用阿卡流 http doc akka io docs akka stream and http experimental 1 0 scala stream index html在 Scala 中进行轮询AWS SQS https aws
  • 为什么参与者“询问”模式被视为反模式或“代码味道”?

    据我所知 询问 模式被认为是一种不好的做法 应该避免 相反 推荐的模式是 每个请求的参与者 模型 然而 这对我来说没有意义 因为 询问 模式正是这样做的 它为每个请求创建一个轻量级参与者 那么为什么这被认为是不好的 特别是当 future
  • 如何隐藏 Akka 远程 Actor 来查找?

    我正在运行 Akka 2 0 2 微内核 并希望为不受信任的远程参与者实现身份验证方案 首先想到的是设置一个身份验证参与者 当身份验证成功时 该参与者会返回对工作参与者的引用 但是 我应该如何保护工作参与者不被简单地通过 actorFor
  • 如何将 sbteclipse 插件添加到 SBT 0.10.x

    我想查看akka的源代码 似乎使用的是0 7 x版本的sbt 我将项目配置转换为0 10 x版本 当我在库依赖项中添加 sbteclipse 并运行 eclipse create src 生成 eclipse 项目时 它告诉 eclipse
  • 使用参与者模型进行基于时间的模拟

    我们有一个单线程应用程序 可以模拟数十万个对象随着时间的推移与共享内存模型的交互 显然 它无法在多 CPU 硬件上进行扩展 在阅读了一些有关基于代理的建模和函数式编程 参与者模型的内容后 我正在考虑使用消息传递范例进行重写 这个想法非常简单
  • 知道 akka actor 何时完成

    有几个人和我一起从事一个项目 一直在试图找出解决这个问题的最佳方法 看起来这应该是经常需要的标准东西 但由于某种原因我们似乎无法得到正确的答案 如果我有一些工作要做 并且我向路由器抛出一堆消息 我如何知道所有工作何时完成 例如 如果我们正在

随机推荐