如何向我的akka​​ actor系统的事件流发送消息而不向特定的演员发送消息?

时间:2018-03-17 09:32:40

标签: scala events stream akka

我有兴趣实施:  1.一个向事件流发送消息的akka​​ actor A;  2. akka actor L,用于侦听已在事件流上发布的特定类型的消息。

如果可能,我想重新使用actor系统的事件流。

我知道该怎么做2.这里有解释:https://doc.akka.io/docs/akka/2.5/event-bus.html#event-stream

但我怎么能做1?

我知道如何让A发送一个发给另一个演员(Ref)的消息,但我不想将消息发送给任何特定演员(参考)。我只是希望消息出现在事件流中,并由正在收听该类型消息的人接听。这有可能吗?

一个侧面问题:如果我按照https://doc.akka.io/docs/akka/2.5/event-bus.html#event-stream中的描述实现2,那么听众是否知道谁发送了该消息?

1 个答案:

答案 0 :(得分:2)

根据您发布的文档链接,您可以将消息发布到EventStream:

system.eventStream.publish(Jazz("Sonny Rollins"))

消息将发送给订阅此消息类型的所有actor:

system.eventStream.subscribe(jazzListener, classOf[Jazz])

对于订阅者了解发件人,我建议您在有效负载中定义一个ActorRef字段,发送者可以在发布消息时将其自引用放入其中。 NB在消息类型中明确定义发送者的ActorRef是新akka-typed库处理所有actor交互的方式,因此习惯这种模式是个好主意。