当前位置: 首页 > 知识库问答 >
问题:

Akka:FSM-重用具有不同消息子类型的参与者

能烨华
2023-03-14

假设我有以下消息:

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

现在,我想为不同类型的Msg重用相同的FSM actor,如下所示。在本例中,我们使用泛型类型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亚型。其余的逻辑在不同的实例中是相同的。

共有1个答案

林富
2023-03-14
class ActorFSM1[T<:Msg] extends FSM[s, Data] {
    when(SomeState) {
        case Event(msg: T, data: Data) =>
 类似资料:
  • 使用StreamBridge,我将包含两种不同类型的对象的消息发送到单个Kafka主题。有没有办法定义一个能够使用两种类型消息的Spring Cloud Stream的功能消费者?

  • 我有一个特征Foo,具体类型a和B都由特征Foo限定。我想返回一个

  • 为什么我不能这样做?我得到编译错误。 那是Java8 我不认为这里违反了任何OO原则。 这真的让我很难实现通用 API...... (我试图将泛型从游戏中剔除,因为泛型API变得反直觉了)

  • 我想将一个原型作用域bean注入到一个单例中。这个原型bean应该只为它被注入的每个单例创建一次(据我所知,默认情况下是这样的)。但是,我确实希望每次都有一个稍微不同的bean,所以我希望能够用一个自定义注释来注释注入点,这是在构造原型bean时使用的。 问题是,我如何找出注入点上有哪些注解?

  • 我已经在我的nuxtjs项目中使用了nuxt auth。在此处输入图像描述

  • 无法使用下面的行从子类访问方法, 假设我在子类中有一个方法,而父类中没有相同的方法。在这种情况下,我们无法使用上述代码行访问子类方法print()。但是请注意,如果我们在父类中有相同的方法,那么我们可以使用上面的代码访问它。 可能没有这样的现实生活场景,但试图理解为什么我无法访问子类使用类型为父的子对象,如果我们没有在父类中定义相同的方法。 示例代码如下: 更多解释——如果我在父类中定义了方法,那