等待多个 Akka FSM 消息

2024-01-10

我有一个 Akka FSM actor,在收到消息后运行以下伪代码ReadyState

lookupA ! Wrapper(Lookup("A"))
lookupB ! Wrapper(Lookup("B"))
lookupC ! Wrapper(Lookup("C"))
goto(LookingUpDataState) using DataFound(a = None, b = None, c = None)

然后,演员等待响应,响应可以是FullResult[T](延伸ServiceResult[T]) or Empty(延伸ServiceResult[Nothing])。成功的查找结果用于填充 DataFound 实例的字段,空查找结果会导致记录错误消息并终止执行者。

我的问题是:如何确定哪个查找失败,以便我可以记录失败或回退到默认值?我能想到的就是检查发送者的 ActorRef(hacky)或向所有消息添加唯一的 ID 字段(高开销)。

这是一个使用 Ask 和 Futures 可以解决的简单问题。是否存在惯用的 Akka 解决方案?


您可以在这里使用一些模式。您将不得不求助于下面列出的这些选项之一。它们都有一些权衡(无论如何基准测试是王道),但我按照“坏到好”的顺序列出了它们,

  • 按顺序执行查询,因此发送 A,等待 A 响应,发送 B ...但这就是horrible- 就像不必要的顺序一样。
  • use the ask模式,所以你将启动(内部这就是 Ask 的工作方式)3 个演员,他们将完成“他们自己的”未来。因此,这也会给发送者带来一些成本,因为它必须启动这些特殊目的参与者(比普通参与者小,但仍然如此)。
  • 是的,您需要以某种方式标记这些消息。因此,您会发送一些 ID,并且响应必须包含相同的 ID,然后您知道它是“哦,这是 A 的响应”等。我认为这是这里推荐的方式。
  • 有一个contribAkka 中提供的模式称为聚合器,它是为此用例设计的,因此您可能需要检查一下:http://doc.akka.io/docs/akka/2.3.4/contrib/aggregator.html http://doc.akka.io/docs/akka/2.3.4/contrib/aggregator.html但是,我想您是否喜欢它很大程度上取决于个人品味。

我个人最喜欢的(我们倾向于避免ask一般来说)会在一个中标记请求Envelope(id, payload)所以响应也可以包含在这样的中Envelope(id, response)。如果您决定将它们称为简单的信封或更多带有领域术语的名称,则由您决定。

希望这可以帮助。

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

等待多个 Akka FSM 消息 的相关文章

随机推荐

  • 在微服务架构中扩展数据库

    假设我们有 5 个微服务 S 每个微服务都需要一个包含一些表的数据库 这些服务中的每一个都需要能够扩展 包括数据库查询 为此 据我所知 我们有几个选择 1 1 S 1 个实例 1 个数据库实例 不要水平缩放 只垂直缩放 2 1 S N 个实
  • 我可以为 Travis YAML 配置命令创建 ALIAS 吗? ...“travis 加密 GITHUB_TOKEN=****** --add”?

    我有一个个人访问令牌来自我在许多项目中使用的 Github 由于令牌对我的所有存储库都具有读 写能力 因此我使用Travis 命令行工具 https github com travis ci travis rb readme来加密GITHU
  • Django:检查是否设置了外键属性

    我有以下模型 class A models Model name models CharField max length 50 content type models ForeignKey ContentType 该模型应该是某些继承树中的
  • XML 命名空间和 XPath

    我有一个应用程序 必须根据 XPath 加载 XML 文档和输出节点 假设我从这样的文档开始
  • 空间索引减慢查询速度

    背景 我有一个包含代表客户区域的 POLYGONS MULTIPOLYGONS 的表 该表包含大约 8 000 行 大约 90 的多边形是圆形 其余的多边形代表一个或多个州 省或其他地理区域 这些形状的原始多边形数据是从美国人口普查数据 h
  • 实例化后模板的特化?

    我的完整代码太长 但这里有一个片段可以反映我的问题的本质 class BPCFGParser public class Edge class ActiveEquivClass class PassiveEquivClass struct E
  • 查看 RadioButtonList 是否具有选定值的最佳方法是什么?

    我在用 if RadioButtonList VolunteerType SelectedItem null 或者怎么样 if RadioButtonList VolunteerType Index gt 0 或者怎么样 根据安德鲁 黑尔的
  • tomcat请求的资源()不可用[重复]

    这个问题在这里已经有答案了 我知道这是一个非常常见的问题 因为我在几个论坛中发现了许多与此相关的问题 包括SO 但我还没有找到解决办法 我的 web xml 位于 WEB INF 中
  • 使用下拉列表过滤表(dataTables)

    我正在使用 dataTables jQuery 插件 非常棒 但我无法根据选择框的更改来过滤我的表 功能 document ready function msds table dataTable sPaginationType full n
  • 即使启用了 SSL,Request.URL 也始终返回 http

    我准备了一个 ASP NET Web 应用程序 ASP NET V2 0 并在我的 IIS V7 5 中配置了它 我在我的应用程序中使用了Request Url AbsoluteUri 它在我的服务器中运行良好 我在客户端的服务器计算机 2
  • 找到重叠圆圈的新位置

    我正在尝试编写一个代码 对于给定的圆列表 list1 它能够找到新圆 list2 的位置 list1 和 list2 具有相同的长度 因为对于 list1 中的每个圆 都必须有一个来自 list2 的圆 每对圆 假设 list1 中的 Ci
  • 从插件添加自定义页面模板

    我正在努力构建我的第一个 WordPress 插件 并且需要它为登录屏幕动态添加自定义页面等 我能找到的唯一接近我需要的东西就在这里 WP 使用插件目录中的文件作为自定义页面模板 https stackoverflow com questi
  • 单线程 JavaScript 下的动画

    JavaScript 是一种单线程语言 因此它一次执行一个命令 异步编程是通过以下方式实现的Web APIs 用于事件处理的 DOM 用于 AJAX 调用的 XMLHttpRequest 用于 setTimeout 的 WindowTime
  • 在 Jenkins 中运行 XCodeBuild 时出现代码签名错误

    不重复类似的问题 如下文进一步解释 从 Jenkins 中运行 XCodeBuild 时出现代码签名错误 但它可以从命令行或 Xcode 中构建正常 过去有几个人遇到过这个问题 他们的共同主题是 Jenkins 在启动时作为守护程序用户运行
  • 在 C# 中动态生成委托类型

    我们有一个要求 需要动态生成委托类型 我们需要根据输入参数和输出生成委托 输入和输出都是简单类型 例如 我们需要生成 int Del int int int string and int Del2 int int string int 任何
  • Super POM,Gradle中层次管理的Parent POM类型

    我们目前使用 Maven 作为构建工具 并且有一个迁移到 Gradle 的指令 我们当前的设置是 我们有一个超级 POM 它定义了所有第三方依赖项 各种插件 distributionManagement URL 并且该 POM 已上传到我们
  • 禁用大型项目​​中的组件

    有很多开发人员和初级人员 我想禁用某些组件 例如
  • 如何在 Chrome 浏览器中调试 AngularJS [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在研究 AngularJS 我想在chrome中调试代码 在 Firefox 中 我可以在 Firebug 的帮助下调试它 任何想法 谢
  • Netty-无法访问类 jdk.internal.misc.Unsafe

    当我将 Java 从 8 升级到 11 时 我收到来自 Netty 的错误 jdk internal misc Unsafe 详细信息如下 我知道这是一条调试级别消息 我可以更改日志级别以忽略它 但我不确定当我忽略它时是否会出现其他问题 例
  • 等待多个 Akka FSM 消息

    我有一个 Akka FSM actor 在收到消息后运行以下伪代码ReadyState lookupA Wrapper Lookup A lookupB Wrapper Lookup B lookupC Wrapper Lookup C g