Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有可能知道在Akka';s";“分布式发布-在群集中订阅”;?_Java_Akka_Distributed_Publish Subscribe - Fatal编程技术网

Java 是否有可能知道在Akka';s";“分布式发布-在群集中订阅”;?

Java 是否有可能知道在Akka';s";“分布式发布-在群集中订阅”;?,java,akka,distributed,publish-subscribe,Java,Akka,Distributed,Publish Subscribe,我有一个Akka系统,演员代表传感器。每次传感器进行观察时,其相应的参与者都会在内部发布/订阅主题上发布该观察结果。这使得扩展观察的使用变得很容易(由一个参与者保存在DB中,由另一个参与者发布到MQTT代理,等等) 一种可能的解决方案是将该主题包含在消息中,以使接收者知道其接收消息的主题。然而,对我来说,这似乎是一个糟糕的设计。有没有可能在Akka的一个演员身上看到当前消息的主题 据我所知,Akka关于集群中分布式发布订阅()的文档中没有提到这一点。据我所知,这并不是作为分布式发布/订阅功能内置

我有一个Akka系统,演员代表传感器。每次传感器进行观察时,其相应的参与者都会在内部发布/订阅主题上发布该观察结果。这使得扩展观察的使用变得很容易(由一个参与者保存在DB中,由另一个参与者发布到MQTT代理,等等)

一种可能的解决方案是将该主题包含在消息中,以使接收者知道其接收消息的主题。然而,对我来说,这似乎是一个糟糕的设计。有没有可能在Akka的一个演员身上看到当前消息的主题


据我所知,Akka关于集群中分布式发布订阅()的文档中没有提到这一点。

据我所知,这并不是作为分布式发布/订阅功能内置的。我通常会通过制作某种信封来解决这一问题:

case class PubSubEnvelope[MessageType](topic: String, payload: MessageType)

为了额外的安全性,也许您希望为
MessageType
创建某种类型的超类型,以便对其进行约束,并为
topic
创建一些类似枚举的结构,而不是
String

我不知道Akka框架,但在一般的发布者/订阅者消息传递中,可以在消息本身中包含元信息。在这种情况下,元信息的属性可以是逻辑主题名称。现在,从设计角度来看,正如您所说,这可能不是一个糟糕的dssign,但是,如果逻辑主题名称是动态的,那么参与者需要进行配置以获得名称,或者如果可以发现,发现它。我认为将消息发送到的主题包含在消息本身中可能是不好的设计的原因是因为它是重复的信息。如果该主题在某个地方可用,也就是说,复制信息本身并不是一件坏事,复制信息可以降低系统的复杂性,从而提高系统的可维护性,如果您采用DB higher normal form的经典案例,这可以在许多系统中实现,但没有发挥作用,因为它使数据检索和查询变得复杂,有时还存在性能瓶颈。我通过使用sender()引用解决了我的问题,因为这适合我的主题结构。但总的来说,这可能是解决问题的方法。谢谢