FSM 与 Akka 中的成为/不成为

2024-01-11

Akka 提供了两种有些重叠的方式来管理 Actor 状态,有限状态机 http://doc.akka.io/docs/akka/2.4.14/scala/fsm.html and 不成/成为 http://doc.akka.io/docs/akka/2.4.14/scala/actors.html。它们各自的优点/缺点是什么?什么时候应该选择其中之一而不是另一个?


FSM是一种 DSL,允许您构建更复杂的、readable状态机比使用核心参与者 API 更可能实现。您可以向业务人员展示 FSM 代码,他们可以验证业务规则。

The FSMDSL 允许您更清晰地将事物组合在一起。例如过渡 http://doc.akka.io/docs/akka/2.1.0/scala/fsm.html#Monitoring_Transitions允许您提取必须在参与者之间重复的逻辑become行为。您还可以订阅其他参与者以获取转换通知,这有助于解耦和测试。

此外,计时器也很好地集成到 DSL 中,并且诸如取消之类的事情也得到了干净的处理。使用调度程序编码超时消息有许多问题。

不利的一面是FSM重要的是它是一个 DSL 和一个供其他团队成员消化的新语法。好处是它是 DSL 和更高级别的抽象。我认为agilesteel的2个状态阈值是一个很好的阈值。但是一旦你超过了 2 个状态,你就会得到以下好处:FSM真的很引人注目。

一定要读FSM 文档 http://doc.akka.io/docs/akka/2.1.0/scala/fsm.html附带的例子 http://doc.akka.io/docs/akka/2.1.0/scala/fsm.html#Examples对比become and FSM.

一个注释:使用“弹出”行为unbecome- 默认行为是不使用行为堆叠。它仅与少数用例相关(即通常不是状态机)。

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

FSM 与 Akka 中的成为/不成为 的相关文章

  • Akka 演员优先级

    我有一个基于参与者的系统 它执行定期的 CPU 密集型数据摄取并为 RESTful 端点提供服务 我使用 Akka actor 来发出信号 控制摄取过程的各个阶段 并使用 Spray 当然是基于 Akka 构建的 来为我的宁静端点提供服务
  • Akka actor 查找或依赖注入

    我刚刚开始使用 Akka 我无法决定是否应该使用依赖注入 如蛋糕模式 或 actor 查找来将 actor 彼此解耦 首选方法是什么 您应该更喜欢向彼此介绍 Actor 这意味着在消息中发送 ActorRef 或与消息一起发送 或者将其传递
  • 使用 Akka 以编程方式获取临时端口

    如果我在 Akka 中将 ActorSystem 配置为使用临时 tcp 端口 更具体地说 我将 http 端口配置为 0 有没有办法在 ActorSystem 启动后以编程方式获取此端口 任何使用 actorOf 创建 Actor 的尝试
  • Actor 系统无响应:ThreadPoolExecutor 调度程序仅创建核心线程池,显然忽略最大线程池大小

    更新 我发现如果我设置ThreadPoolExecutor s核心池大小与最大池大小相同 29 个线程 但是 如果我将核心池大小设置为 11 最大池大小设置为 29 那么 Actor 系统只会创建 11 个线程 我该如何配置ActorSys
  • Akka 远程 `system.shutdown()` 导致 EndpointDisociatedException?

    我有简单的客户端和服务器设置 在发送所有异步请求并在服务器确认后的某个时刻 客户端调用system shutdown 这导致服务器akka remote EndpointDisassociatedException和一堆日志错误 如下所示
  • 用于 REST 轮询的 Akka

    我正在尝试将大型 Scala Akka PlayMini 应用程序与外部 REST API 连接起来 这个想法是定期轮询 基本上每 1 到 10 分钟 根 URL 然后爬取子级 URL 以提取数据 然后将其发送到消息队列 我想出了两种方法来
  • 实现简单 FSM 的 Pythonic 方法是什么?

    昨天我必须解析一个非常简单的二进制数据文件 规则是 在一行中查找两个都是 0xAA 的字节 然后下一个字节将是一个长度字节 然后跳过 9 个字节并输出给定 数量的数据那里 重复到文件末尾 我的解决方案确实有效 并且很快就组合在一起了 尽管我
  • Akka TestProbe 测试 context.watch() / 终止处理

    我正在使用 TestKit 测试 akka 系统 我正在测试的系统的一个参与者在收到某种消息类型后 context watches 发送者 并在发送者死亡时自杀 trait Handler extends Actor override de
  • 将有限状态机转换为正则表达式

    有没有工具 或算法 来转换有限状态机 into a 正则表达式 不是相反 那很容易 有几种算法可以执行此任务 Brzozowski 和 Mc Cluskey 的 状态消除法 线性方程组的求解 McNaughton 和 Yamada 的方法等
  • 考虑到可扩展性的基于组件的应用程序:OSGi 还是 Akka?

    在我的硕士论文中 我正在开发一个用于销售大型活动门票的应用程序框架 我的主要要求是可修改性 可扩展性和性能 我的客户 活动组织者 应该能够在运行时轻松替换组件并添加功能 此类组件的一个示例是座位分配组件 我的导师说看看 OSGi 松散耦合的
  • 如何使用 Akka HTTP 从多个参与者/Web 处理程序正确调用单个服务器?

    我有一个服务 我们称之为服务 A 它使用 Akka Server HTTP 来处理传入请求 我还有第 3 方应用程序 服务 B 它提供了多种 Web 服务 服务 A 的目的是转换客户端请求 调用服务 B 的一个或多个 Web 服务 合并 转
  • Actors 中 future 的执行上下文

    我有一个 Actor 并且在某些消息上我正在运行一些返回 Future 的方法 def receive Receive case SimpleMessge gt val futData Future Int futData map data
  • 我可以从任意异步任务访问 Http.Context.current() 吗?

    我正在开发一个移动应用程序的后端 该应用程序当前在 Play 2 1 1 上运行 作为处理某些请求的一部分 我们会发送推送通知 发送推送通知的下游请求应该完全异步 并且与移动客户端的原始请求响应分离 我想访问Http Context cur
  • Actor 中的 WebSocket.acceptWithActor 和 @Inject()(播放 2.5)

    WebSocket acceptWithActor不使用 Guice 实例化一个新的 Akka actor 在 Play 2 4 中 仍然可以通过导入来为我的 actor 使用注入器play api Play current 片段来自Rea
  • Akka 通过可堆叠行为拦截接收

    Akka 和 Scala 新手 请根据需要随意编辑问题 以便清楚地表达我在 Scala 和 Akka 领域的意图 在展示代码片段之前 这是我想要解决的问题 我本质上想开发一个通用模块 供我的团队在使用 Akka Actor 开发应用程序时使
  • Akka Testkit 错误且版本不明确

    我正在使用 Akka testkit 库来测试我的一些演员 这是我的 build sbt 中的内容 com typesafe akka akka testkit 2 6 10 Test 这是我得到的错误 java lang IllegalS
  • Akka 和 ReactiveMongo

    我正在尝试找到在集群工作人员之间共享相同连接池的最佳方法 我有以下结构 Master Actor gt Worker Actors 最多 100 个或更多 gt MongoDB 我想在工作人员和 MongoDB 之间放置reactivemo
  • 如何使 scalatest 与 Spraytestkit 和 HttpServiceActor 一起工作

    我在看Spray 1 3 1 测试套件文档 http spray io documentation 1 2 1 spray testkit 但找不到下面我需要的正确示例 我有这个样本spray 1 3 1 service trait MyS
  • 案例类和案例对象之间的区别?

    我正在学习 Scala 和 Akka 并且在最近的查找中solution https stackoverflow com questions 22770927 waiting for multiple results in akka 我发现
  • 如何将参数传递给 `transitions` 库中的 on_enter 回调?

    我想用过渡 https pypi org project transitions 并且需要一个我在文档中找不到的相当琐碎的功能 并且想知道它是否已实现 我想定义一个on enter在某些状态上回调 但将参数传递给该回调 至少知道我是从哪个状

随机推荐

  • 我们可以为“Skype for Business”构建 Skype 机器人吗?

    我见过与 Skype 一起使用的机器人编程示例 是否可以使用 Microsoft 的机器人 认知服务工具 框架开发在 Skype for Business 上运行的企业机器人 Skype for Business 尚不支持机器人框架 htt
  • 使用Python对文件夹中的每个文件执行命令

    我正在尝试创建一个Python脚本来 查看文件夹 input 对于该文件夹中的每个视频 运行 mencoder 命令 将它们转码为可在我的手机上播放的内容 mencoder 完成运行后 删除原始视频 这看起来不太难 但我很喜欢 python
  • 当这个通用约束看起来有循环引用时,为什么它会编译

    我在 csharp 中为 MVCContrib Html 帮助器编写了一个扩展方法 并对通用约束的形式感到惊讶 从表面上看 它似乎通过类型参数循环引用自身 也就是说 该方法可以根据需要进行编译和工作 我很乐意有人解释为什么这样做有效 以及是
  • Windows 10 UWP 中的电话

    目前 我找到了 Windows ApplicationModel Calls API 无法拨打电话或启动可用于从我的应用程序拨打电话的不同选项 我也尝试了这个代码 但仍然无法实现电话呼叫功能 UWP有什么解决方案吗 谢谢 if ApiInf
  • 两个 div 中的段落对齐方式,中间有图像

    我怎样才能对齐我的段落 如下图所示 我需要展示一份报纸之类的东西 其中应该包含此内容 以下是我正在使用的html代码 div class left div div class right div div class myImage img
  • PHP 中的字符串解析

    我正在尝试用 PHP 解析一个字符串 father name John father weight 44 50 kid gt name Marko gt age 12 kid gt name Sevda gt age 17 kid gt n
  • 如何在R中将槽的默认值设置为NULL?

    我是 R 新手 我试图定义一个类似于树节点的类 也就是说 它有一个左节点和右节点 它应该与父节点属于同一类 所以我将类定义如下 setClass Node representation left Node right Node 我想通过设置
  • Python - 服务器从两个 UDP 套接字监听

    我是 Python 新手 而且我无法让服务器同时监听两个端口 这是我到目前为止编写的代码 sock client1 socket socket socket AF INET Internet socket SOCK DGRAM UDP so
  • 如何用Xcode修改并行编译数量

    使用 XCode 构建 C 项目时如何更改并行编译的数量 我不是在谈论分布式构建 而是在一台计算机上同时编译来自单个项目的一组源文件 当前使用Xcode 3 2 4 Thanks 对于 Xcode 4 您必须设置 IDEBuildOpera
  • 通过 ReactJS 访问 JSON 中的数组

    我使用 ReactJS 从 JSON 文件获取数据
  • 如何在 pygame 中从图像中剪切圆形(或任何非矩形)?

    我正在使用 Pygame 并有一个图像 我可以从中剪出一个矩形 image pygame transform scale pygame image load example png 32 32 handle surface image co
  • 使用onDraw扩展android按钮

    我想更改按钮形状但我想使用 onDaw 方法和扩展按钮班级 所以我刚开始做的是
  • 如何在QT中访问父控件指针

    我有一个类似这样的代码 Window Window QStackedWidget centralApp new QStackedWidget QWidget1 wgt1 QWidget1 QWidget2 wgt2 QWidget2 QWi
  • 添加片段时从汉堡包到箭头图标的过渡动画

    我已经实现了主 细节流程 我想在添加片段后获得从汉堡包图标到箭头图标的过渡动画 与打开导航抽屉时的动画相同 我正在使用如下代码 protected void onCreate Bundle savedInstanceState super
  • BigQuery - 如何比较“日期”列(使用旧版 SQL)?

    我有一个包含一列的 BigQuery 表Date这是一个date类型 我正在尝试运行此查询 SELECT FROM dataset table name WHERE Date 2016 07 11 这会引发错误 Argument type
  • 高级 HTML Agility Pack 使用

    我对 HTML Agility Pack 还很陌生 因此我需要一些帮助来了解下一步该做什么 我可以做一些简单的事情 比如从 href 中提取一个值 知道我正在寻找的 url 字符串 并且我可以根据正在使用的特定类来提取跨度中的值 但我不明白
  • Mysql将列名从“group”更改为“group_code”

    我将列名设置为 group 结果发现这是一个保留字 现在我尝试将名称更改为 group code 但出现错误 我尝试 ALTER TABLE task values CHANGE group group code VARCHAR 40 NO
  • 按照与另一个数组相同的顺序对一个数组进行排序

    我有一些像这样的 50 多个名字的数组 dan ryan bob steven corbin bob dan steven corbin 我有另一个顺序正确的数组 请注意 上面的第二个数组并不包含所有名称 但我仍然希望它遵循以下顺序 rya
  • 以相同的方式对两个 pandas 数据帧进行采样

    我正在进行机器学习计算 有两个数据帧 一个用于因子 另一个用于目标值 我必须将两者分为训练和测试部分 在我看来 我已经找到了方法 但我正在寻找更优雅的解决方案 这是我的代码 import pandas as pd import numpy
  • FSM 与 Akka 中的成为/不成为

    Akka 提供了两种有些重叠的方式来管理 Actor 状态 有限状态机 http doc akka io docs akka 2 4 14 scala fsm html and 不成 成为 http doc akka io docs akk