我正在学习阿卡。假设我们有几个学生演员用英语提问,有几个教师演员用葡萄牙语回答,只有一个翻译演员,如下图所示。
如何将问题与答案相关联?
PS。在这个例子中,只有三种类型的演员,但我们也要考虑我们之间可以有很多其他演员。
答案 0 :(得分:1)
我建议你采用不同的方法。学生和老师都直接相互沟通。如果他们不懂语言,他们可以使用翻译服务来获取正确的语言信息。这样,学生和老师不需要知道使用另一种语言的语言,并使通信协议更加简单。
答案 1 :(得分:1)
以下是可能解决您问题的几个要点(不一定与您的问题的顺序相同):
如果您想查找学生提出的问题,请将学生演员的Map
或actorRef
(*)维持为私人actorPath
密钥和相应的问题ID(例如,使用随机UUID分配)作为值。由于Map
在密钥查找中是高效的(O(1)),因此如果还需要按问题查找,则甚至可以维持另一个Map
反转密钥和值的情况并不罕见。 / p>
为了实现可扩展性,我会通过删除例如已经发送给教师的问题来保持Map
最小化。如有必要,可以将处理过的问题保存在数据库(例如Redis,Cassandra)中以进行分析查询。
发送给译者演员的问题将根据他们的语言/主题进行模式匹配,以便派遣到匹配的教师角色。例如,根据业务需求,可以通过Akka router将问题循环到一组符合条件的教师角色。
如果需要进行额外的答案处理工作,答案可以直接从教师发送给学生,也可以通过中间人(可能是演员翻译)发送。
Akka将消息发送给mailbox中的演员并允许操作自定义。为了维护Q& A的详细帐户,我建议您应用自己的编程逻辑,并在必要时将它们存储在数据库中。
(*)归结为在actorRef
和actorPath
之间进行选择时的具体业务要求。主要区别在于是否可能发生演员转世。例如,如果您想要将使用相同actorPath
已终止学生演员的新学生演员视为单独的学生,请使用actorRef
。有关详细信息,请参阅此Akka doc。