如何将参与者消息限制为特定类型?

2024-02-27

In Akka http://akka.io/,除了使用 RPC 风格编程模型的“Typed Actor”API 之外,是否有其他方法可以将发送给 Actor 的消息限制为特定的静态类型?

我可以在 Akka 中使用消息传递风格而不放弃 Actor 边界的静态类型安全吗?

例如,我想使用这样的代码:

sealed abstract class FooMessage
case object Foo extends FooMessage
case object Bar extends FooMessage

class FooActor extends Actor[FooMessage] {
  def receive = {
    case Foo => () // OK

    // Would raise a compiler error:
    // case s: String => error("Can't happen, String is not a subtype of FooMessage") 

  }
}

val fooActor = actorOf[FooActor]
fooActor ! Foo // OK

// Won't compile:
fooActor ! "Hello"

也许人们必须扩展一些基本特征或具有类似的构造Either允许系统级消息(Exit, etc.).


然后,您必须将消息类型编码到 Actor 引用中,这将大大减少 ActorRegistry 等内容的值。

此外,使用“成为”(这是演员模型的基础)等强大的机制,输入消息的价值就降低了。

由于当消息与当前行为不匹配时,Akka 不会泄漏内存,因此不存在将“错误”消息发送给“错误”参与者的相同风险。

另外,Actor 本质上是动态的,所以如果你想让它们静态,请使用 TypedActor (这不是 RPC,它就像常规 Actor 一样的 RPC,void 方法是 ! 调用,Future 返回类型是 !!! 以及其他返回类型是基于!!)

常见的做法是在 Actor 的伴生对象中声明 Actor 可以接收哪些消息,这使得更容易知道它可以接收什么。

这有帮助吗?

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

如何将参与者消息限制为特定类型? 的相关文章

随机推荐

  • 固定div与滚动条重叠

    我在使用滚动条将固定 div 放置在其他 div 中时遇到问题 它与滚动条重叠 它发生在 safari 和 ie 11 下 当我将 z index 设置为低于带有滚动条的 div 时 固定 div 位于其下方 并且它会丢失交互 您无法单击链
  • Json.net 不再在重复的情况下抛出异常

    我正在尝试将我的 C 应用程序从 Newtonsoft JSON 6 升级到最新版本 9 0 1 我注意到反序列化包含重复元素的对象时行为发生了变化 例如 name test data myElem 1 myElem 2 当反序列化此类对象
  • 如何测试片段视图对用户是否可见?

    我有一个ViewPager 每个页面都是一个Fragment视图 我想测试片段是否位于可见区域 Fragment isVisible 唯一的测试 该片段附加到一个活动 片段设置为可见 该片段已添加到视图中 ViewPager 将创建 3 个
  • Airflow DAG动态结构

    我正在寻找一个可以决定 dag 结构的解决方案当 dag 被触发时因为我不确定我必须运行的操作员数量 请参阅下面我计划创建的执行顺序 Task B 1 Task C 1 Task B 2 Task C 2 Task A Task B 3 g
  • 您将如何制定每日课程表?

    我想做的事情非常简单 但我正在努力找到最好或最优雅的方法来做到这一点 我现在正在构建的 Rails 应用程序将有一个每日课程表 对于每个类别 与此问题相关的字段是 一周中的天 起始时间 结束时间 单个条目可能是这样的 星期几 星期三 开始时
  • 在php中显示html文件的内容[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 大家好 我
  • 如何解决“TypeError:callback.apply不是函数”?

    我正在做一个大学项目 我已经阅读了关于我的问题的每一篇文章 但我还没有找到解决方案 也许你可以帮我 代码如下 viewerObj update id currentIDViewerVar minutesWatched 5 upsert tr
  • 为什么这个程序在 Python 中比 Objective-C 更快?

    我感兴趣了这个小例子 https stackoverflow com questions 5523058 how to optimize this python code from thinkpython exercise 10 10 55
  • 在 Safari 中提交表单时加载 GIF 会停止动画

    看看这个简单的JSFiddle http jsfiddle net VpDUG 4952 忽略所有的javascript代码 这里的问题只是关于动画加载GIF 我想在提交表单之前显示动画加载 GIF 我试过这个 setTimeout fun
  • 如何覆盖 .bash_aliases 中设置的别名

    我喜欢使用 bash 别名来自定义 bash 命令 有没有办法覆盖 bash 别名设置 或者我应该将别名重命名为与原始命令不同的名称 例如 我的 bash aliases 包括 alias ls ls ltr 如果我只想检索文件名 是否需要
  • 如何使用 bash 大括号扩展制作乘法表?到目前为止我有这个: echo $[{1..10}*{1..10}]

    我想更深入地学习 bash 所以我决定制作一个乘法表 我有以下声明的功能 echo 1 10 1 10 但这给了我以下输出 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15
  • 为初学者覆盖 Magento 管理控制器

    在 Magento 管理部分 我想覆盖核心 Mage 的 Sales Order ShipmentController php 控制器文件 我尝试使用 from 和 to 标签重写URL 但没有成功 我不知道这样做的实际和正确方法是什么 因
  • 在Delphi中,如何让货币数据类型以不同的形式以不同的货币显示?

    我需要编写一个 Delphi 应用程序 从数据库中的各个表中提取条目 并且不同的条目将采用不同的货币 因此 我需要根据我加载的项目的货币 为每种货币数据类型 英镑 欧元等 显示不同的小数位数和不同的货币字符 有没有一种方法可以几乎全局地更改
  • XSLT 具有相同匹配的多个模板

    我目前坚持应用多个 xsl template 来对元素进行相同的匹配 下面的例子显示了这个问题 有谁知道使用两个 模板匹配 创建预期输出的 XSL 模板吗 由于技术原因 不可能将两个 模板 元素放在一起 Input
  • 提高线程速度[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 每次调用线程后 其速度都会增加 特别是 FirstCircleRepaintThread SecoundCircleRepaintThre
  • 声明函数之前的“new”运算符

    就像探索 javascript 作为我对整个编程的第一次参考 但由于我不是专业人士 无法理解很多东西 因此 如果有人能够解释幕后实际发生的事情 我们将不胜感激 在 body 标签中 我声明了两个函数 一个带有 new 另一个没有 新函数 s
  • 将字符串乘以数字

    我想在 PHP 中显示分数 为此我写道 a 3 b 2 c a b echo c this displays 3 2 but on the other hand I want to multiply c by an integer echo
  • Cheerio、axios、reactjs 从网页上抓取表格并返回空列表

    试图从这个网站上删除这张表 https www investing com commodities real time futures https www investing com commodities real time future
  • PHP 文档根目录

    只是为了确认 正在使用 SERVER DOCUMENT ROOT 与使用相同 in HTML 例如 如果当前文档是 folder folder folder index php 我可以使用 在 HTML 中 从根开始 somedoc htm
  • 如何将参与者消息限制为特定类型?

    In Akka http akka io 除了使用 RPC 风格编程模型的 Typed Actor API 之外 是否有其他方法可以将发送给 Actor 的消息限制为特定的静态类型 我可以在 Akka 中使用消息传递风格而不放弃 Actor