如何从akka中的不同群集节点检索碎片区域?

如何从akka中的不同群集节点检索碎片区域?,akka,akka-cluster,Akka,Akka Cluster,在下面的代码中,集群节点FrontendNode如何获得对碎片区域“SomeShardRegion”的引用 已在其他群集节点BackendNode中启动的? 当我尝试下面的代码时,我得到一个异常:Shard type[SomeShardRegion]必须首先启动 注意:我不想在FrontendNode中启动另一个“SomeShardRegion” object BackendNode extends App { implicit val system = ActorSystem("Clust

在下面的代码中,集群节点FrontendNode如何获得对碎片区域“SomeShardRegion”的引用 已在其他群集节点BackendNode中启动的? 当我尝试下面的代码时,我得到一个异常:Shard type[SomeShardRegion]必须首先启动

注意:我不想在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")
}

似乎我总是要在检索区域之前启动它。但是,如果我不想在前端创建实体,我可以

我发现很多人引用文档时没有指明确切的位置,因此这里是指向文档的链接,这是与文档最接近的点

引用文件

发送到实体的消息始终通过本地共享区域发送。 命名实体类型的ShardRegion actor引用由返回 ClusterSharding.start,也可以使用 ClusterSharding,shardRegion。ShardRegion将查找该位置 如果实体尚不知道其位置,则为该实体的碎片

这里有一些代码

// Selecting the ShardRegion with name Counter
val counterRegion: ActorRef = ClusterSharding(system).shardRegion("Counter")
counterRegion ! Message

我可以问一下为什么要检索另一个节点的区域吗?也许有一个更好的模式来实现你想要的目标。我正在做DDD,最初希望我的web前端直接与我的聚合根区域对话。稍后,我将为长时间运行的事务介绍Saga(PM),它同样需要有对聚合区域的引用,以便能够协调事务。无论哪种情况,我都会遇到上面所示的相同问题。你有别的建议吗?请务必让我知道。谢谢。DDD是什么?我的集群分片已经生锈了,但我认为最好是让分片中的节点都有一个本地参与者来监听消息频道(发布者流或其他任何名称),然后你的前端可以在频道上讲话,然后侦听器传播到他们的区域协调器。你将不得不处理多个消息等。这是领域驱动的设计。我明白你的意思。然而,DDD引入了akka已经实现的其他模式,而无需让参与者订阅事件流。我刚刚知道如何从前端节点检索碎片区域。将立即发布答案谢谢发布您自己的答案。这对许多人都有帮助:)