【问题标题】:How can I send a message to my akka actor system's event stream without addressing the message to any actor in particular?如何向我的 akka Actor 系统的事件流发送消息,而不将消息特别发送给任何 Actor?
【发布时间】:2018-03-17 09:32:40
【问题描述】:

我有兴趣实施: 1. 一个向事件流发送消息的 akka actor A; 2. 一个akka actorL,它监听已经发布在事件流上的某种类型的消息。

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

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

但是我该怎么做 1?

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

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

【问题讨论】:

    标签: scala events stream akka


    【解决方案1】:

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

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

    消息将被传递给订阅此消息类型的所有参与者:

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

    为了让订阅者知道发送者,我建议你在你的有效载荷中定义一个 ActorRef 字段,发送者可以在发布消息时将其自身引用放入其中。注意:在消息类型中显式定义发送者的 ActorRef 是新的akka-typed 库处理所有参与者交互的方式,因此最好习惯这种模式。

    【讨论】:

      猜你喜欢
      • 2013-04-30
      • 2015-05-29
      • 2021-09-11
      • 1970-01-01
      • 2017-06-29
      • 1970-01-01
      • 2015-12-09
      • 2019-10-17
      • 2021-11-22
      相关资源
      最近更新 更多