在下面的代码中,集群节点FrontendNode如何获取已在其他集群节点BackendNode中启动的分区区域“SomeShardRegion” 的引用? 当我尝试下面的代码,我得到这个异常:碎片类型[SomeShardRegion]必须首先启动。如何从akka中检索分割区域形成不同的集群节点?
注意:我不想在FrontendNode中启动另一个“SomeShardRegion”!
object BackendNode extends App {
implicit val system = ActorSystem("ClusterSystem", config)
ClusterSharding(system).start(
typeName = "SomeShardRegion",
entityProps = someProps,
settings = ClusterShardingSettings(system),
extractEntityId = idExtractor,
extractShardId = shardResolver)
}
object FrontendNode extends App {
implicit val system = ActorSystem("ClusterSystem", config)
// throws an exception: Shard type [SomeShardRegion] must be started first
val shardRegion = ClusterSharding(system).shardRegion("SomeShardRegion")
}
我能问你为什么你要检索另一节点的区域?也许有一个更好的模式,你想实现 –
当然。我在做DDD,并且最初希望我的web前端直接与我的聚合根区域进行对话。后来我会介绍佐贺(PM)长期运行的交易,它需要引用聚合区域来协调交易。无论哪种情况,我都会遇到上述相同的问题。你有其他建议吗?请让我知道。谢谢。 – Mutaz
什么是DDD?我的Cluster-sharding-fu是生锈的,但我认为如果让分片中的节点每个都有一个侦听消息通道的本地actor(发布者流或者他们称之为的任何东西),那么会更好,那么你的前端可以在频道上进行交谈,然后听众将传播到他们的区域协调员。你将不得不处理多个消息等等。 –