【问题标题】:Akka: FSM - reuse actor with different subtype of messageAkka:FSM - 重用具有不同消息子类型的参与者
【发布时间】:2015-07-31 02:02:36
【问题描述】:

假设我有以下消息:

trait Msg { def c: Int }
case class MsgType1(c: Int) extends Msg
case class MsgType2(c: Int) extends Msg

现在,我想为不同类型的 Msg 重用相同的 FSM 演员,如下所示。在这种情况下,我们使用泛型类型 Msg 作为消息类型。当我实例化这个演员时,我想以某种方式指示我想要接收哪种类型的 Msg

class ActorFSM1() extends FSM[s, Data] {
  when(SomeState) {
    case Event(msg: Msg, data: Data) =>

而不是复制如下代码:

class ActorFSM1() extends FSM[s, Data] {
  when(SomeState) {
    case Event(MsgType1(c), data: Data) =>

class ActorFSM2() extends FSM[s, Data] {
  when(SomeState) {
    case Event(MsgType2(c), data: Data) =>

这可能吗? 注意:我不想在同一个演员中有不同的案例陈述。他们应该是不同的参与者,碰巧接收到不同的 Msg 子类型。其余逻辑在不同实例之间是相同的。

【问题讨论】:

    标签: scala akka actor fsm


    【解决方案1】:
    class ActorFSM1[T<:Msg] extends FSM[s, Data] {
        when(SomeState) {
            case Event(msg: T, data: Data) =>
    

    【讨论】:

    • 它对我有用没问题。你能详细说明为什么这不起作用吗?
    • 尝试将Event(msg: MsgType1, data: Data)Event(msg: MsgType2, data: Data) 发送给同一演员。它工作正常吗?
    • 是的,确实如此。我收到子类型的未处理消息。
    猜你喜欢
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 2016-10-17
    • 2020-02-20
    • 2011-07-29
    • 2016-11-05
    • 2013-05-26
    相关资源
    最近更新 更多