【发布时间】:2017-01-31 14:16:42
【问题描述】:
我有一个 Akka 系统,其中的 Actors 代表传感器。每次传感器进行观察时,其对应的 Actor 都会在内部发布/订阅主题上发布该观察。这使得扩展观察的使用变得容易(由一个 Actor 保存在 DB 中,由另一个 Actor 发布到 MQTT 代理等)
让接收者知道它在哪个主题上收到消息的一种可能的解决方案是在消息中包含该主题。然而,这对我来说似乎是糟糕的设计。是否可以在 Akka 的 Actor 中查看当前消息是在哪个主题上接收的?
据我所知,Akka 关于集群中分布式发布订阅 (http://doc.akka.io/docs/akka/current/java/distributed-pub-sub.html) 的文档没有提到这一点。
【问题讨论】:
-
我不了解 Akka 框架,但在广义的发布者/订阅者消息传递中,可以在消息本身中包含元信息。在这种情况下,元信息的属性可以是逻辑主题名称。现在从设计的角度来看,它可能不是您所说的糟糕的设计,但是,如果逻辑主题名称是动态的,那么 Actor 需要可配置以获取名称,或者如果可发现,则发现它。
-
我认为将消息发送到的主题包含在消息本身中可能是糟糕的设计的原因是因为它是重复的信息。如果该主题在某处可用,那就是。
-
复制信息本身并不是一件坏事,如果您采用 DB 更高范式的经典案例,复制信息可以降低系统的复杂性并因此提高可维护性当然可以考虑,这可以在许多系统中都可以实现,但没有发挥作用,因为它使数据检索和查询变得复杂,有时还存在性能瓶颈
标签: java akka distributed publish-subscribe