Akka中Typed和UnTyped Actors有什么区别?什么时候用?

时间:2011-11-15 11:06:54

标签: java actor akka

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

4 个答案:

答案 0 :(得分:18)

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

我很惊讶文档不够用:

爪哇:

Scala的:

不同之处在于TypedActors具有静态接口,并且该接口上方法的调用将转换为消息发送。 UntypedActors可以接收任何消息。

希望有所帮助。

干杯, √

答案 1 :(得分:4)

Actors (Untyped)

对于演员(Scala)来接收消息,他们必须混合消费者特征。例如,以下actor类(Consumer1)实现endpointUri方法,该方法在Consumer trait中声明,以便从文件接收消息:data / input / actor Camel端点。无类型的actor(Java)需要扩展抽象的UntypedConsumerActor类并实现getEndpointUri()和onReceive(Object)方法。

Actors (Typed)

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

Reference

答案 2 :(得分:2)

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

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

[1] Akka Essentials

答案 3 :(得分:1)

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/