关联Akka中的消息

关联Akka中的消息,akka,Akka,我在学阿卡语。假设我们有几个学生演员用英语提问,几个教师演员用葡萄牙语回答,只有一个翻译演员,如下图所示 我如何将这些问题与他们的答案联系起来 我应该在Translator actor中保留一个关联列表作为状态吗 我是否应该在消息负载中添加学生参与者的完整路径作为一个字段,以便翻译人员参与者可以找到提出问题的学生(使用ActorSystem的actorSelection方法) Akka是否具有自动跟踪“调用堆栈”的内置功能 其他方式 在这个例子中,只有三种类型的演员,但我们也认为我们可以在

我在学阿卡语。假设我们有几个学生演员用英语提问,几个教师演员用葡萄牙语回答,只有一个翻译演员,如下图所示

我如何将这些问题与他们的答案联系起来

  • 我应该在Translator actor中保留一个关联列表作为状态吗
  • 我是否应该在消息负载中添加学生参与者的完整路径作为一个字段,以便翻译人员参与者可以找到提出问题的学生(使用ActorSystem的actorSelection方法)
  • Akka是否具有自动跟踪“调用堆栈”的内置功能
  • 其他方式

在这个例子中,只有三种类型的演员,但我们也认为我们可以在他们之间有很多其他演员。

< P>我推荐一种不同的方法。学生和教师都直接相互交流。如果他们不懂语言,他们可以使用翻译服务获得正确的语言信息。这样,学生和教师就不需要知道使用另一种语言的是什么,也不需要让交流协议简单得多。

下面是一些要点(不一定与您的问题顺序相同),可以解决您的问题:

  • 如果您想查找学生提出的问题,有必要维护一个私有的
    Map
    ,将学生参与者的
    actorRef
    actorPath
    (*)作为键,并将相应的问题ID(例如,使用随机UUID分配)作为值。由于
    Map
    在键查找中效率很高(O(1)),因此,如果还需要按问题查找,则维护另一个
    Map
    来反转键和值也不少见

  • 为了提高可伸缩性,我会通过删除已经发送给老师的问题,将
    地图
    最小化。如有必要,可将处理后的问题保存在数据库(如Redis、Cassandra)中进行分析查询

  • 发送给译员角色的问题将根据其语言/主题进行模式匹配,以便发送给匹配的教师角色。根据业务需求,这些问题可以(例如)通过网络向一组合格的教师演员循环提问

  • 答案可以直接从教师发送给学生,如果需要额外的答案处理工作,也可以通过中间参与者(可以是参与者翻译)发送

  • Akka将消息发送给参与者,并允许操作自定义。为了维护问答的细粒度描述,我建议您应用自己的编程逻辑,并在必要时将它们存储在数据库中

(*)它归结为在
actorRef
actorPath
之间进行选择的特定业务需求。主要区别在于演员的转世是否可能发生。例如,如果要将使用与已终止的学生角色相同的
actorPath
的新学生角色视为单独的学生,请使用
actorRef
。有关更多详细信息,请参见此