Akka 中的 Typed 和 UnTyped Actor 有啥区别?啥时候用啥?

Posted

技术标签:

【中文标题】Akka 中的 Typed 和 UnTyped Actor 有啥区别?啥时候用啥?【英文标题】:What is the difference between Typed and UnTyped Actors in Akka? When to use what?Akka 中的 Typed 和 UnTyped Actor 有什么区别?什么时候用什么? 【发布时间】:2011-12-29 10:32:34 【问题描述】:

我尝试阅读 Akka 文档以找出 Typed 和 Untyped 演员之间的确切区别。什么时候用什么?我不确定我错过了什么。有人可以在这里指出一些相关的东西或提供这个问题的答案吗?

【问题讨论】:

【参考方案1】:

UntypedActor 只是 Actor 的名称,但作为 Java API。

以下是一些文档链接:

Java:

http://akka.io/docs/akka/1.2/java/typed-actors.html http://akka.io/docs/akka/1.2/java/untyped-actors.html

斯卡拉:

http://akka.io/docs/akka/1.2/scala/typed-actors.html http://akka.io/docs/akka/1.2/scala/actors.html

不同之处在于 TypedActor 有一个静态接口,该接口上的方法调用被转换为消息发送。 UntypedActors 可以接收任何消息。

希望对您有所帮助。

干杯, √

【讨论】:

为什么人们通常更喜欢使用无类型的演员而不是有类型的演员?键入的似乎使代码更具可读性 - 更少的“instanceof”/“case” - 涉及。更像是面向对象的。更多类型,如 Java 和 Scala 语言。 我的意见:使用无类型的演员,你必须按演员过滤消息。使用类型化的演员,您必须只为准确的消息绑定。 类型化的 Actor 会引发高耦合,它们不允许成为/不成为/不成为(这是在 Actor 内部处理状态的原始和纯函数方式),更多信息 - letitcrash.com/post/19074284309/when-to-use-typedactors【参考方案2】:
Actors (Untyped)

为了让actors (Scala) 接收消息,他们必须混合Consumer trait。例如,以下 actor 类 (Consumer1) 实现了在 Consumer trait 中声明的 endpointUri 方法,以便从 file:data/input/actor Camel 端点接收消息。无类型actor (Java) 需要扩展抽象的UntypedConsumerActor 类并实现getEndpointUri() 和onReceive(Object) 方法。

Actors (Typed)

类型化的actors也可以从Camel端点接收消息。与仅实现单个接收或 onReceive 方法的(非类型化)actor 相比,类型化actor 可以定义多个(消息处理)方法,每个方法都可以从不同的 Camel 端点接收消息。对于要作为 Camel 端点公开的类型化 actor 方法,必须使用 @consume 注释对其进行注释。例如,以下类型化的消费者角色定义了两个方法,foo 和 bar。

Reference

【讨论】:

Mithun,关于演员需要混合 Consumer trait 以接收消息的部分是关于 Camel 消息的,对吧?当然,任何 Akka Actor 都可以接收普通的 Akka 消息,无论有无消费者。【参考方案3】:

无类型actor响应发送的消息,而类型actor响应方法调用(参数值是消息)。

类型化 Actor 模型用于为只能响应预定义消息集的 Actor 定义严格的契约。在这种情况下,不需要将每条消息都封装为一个对象;类型化的actors允许我们定义单独的方法来接受合约定义的多个输入。用 Java 的说法,类型化的 Actor 提供了面向对象世界中的 Java 接口。[1]

[1]Akka Essentials

【讨论】:

【参考方案4】:

Akka 无类型演员“不作曲”和“没有有用的类型”。

这违背了我们使用 Scala 的真正原因:它的函数式编程能力。 请参阅http://noelwelsh.com/programming/2013/03/04/why-i-dont-like-akka-actors/ 以深入了解这种心态。

另外,请参阅在 Scala 中改进这一点以匹配 Haskell 方式的尝试。

http://letitcrash.com/post/40198993865/makkros-first-step-towards-typed-channels http://letitcrash.com/post/45188487245/the-second-step-akka-typed-channels

似乎在 Akka 中仍处于试验阶段,甚至已经放弃 - 不清楚。

这种类型化通道的想法很有意义,因为在尝试构建类型检查数据(分析)管道时会出现类似问题。

Akka Typed 似乎是向更安全的编程模型的一次伟大进化:https://opencredo.com/akka-typed/

【讨论】:

以上是关于Akka 中的 Typed 和 UnTyped Actor 有啥区别?啥时候用啥?的主要内容,如果未能解决你的问题,请参考以下文章

akka-typed - typed-actor, typed messages

akka-typed - typed-actor, typed messages

akka-typed - EventSourcedBehavior in action

akka-typed - EventSourcedBehavior in action

Akka 集群单例Cluster Singleton

sql XML Schema Collection,SQL Server中的Type vs Untyped XML