以下のコードでは、クラスターノードのFrontendNodeが、他のクラスターノードですでに開始されているシャード領域 "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とは何ですか?私のクラスタシャーディングフーは錆びていますが、シャーディングに参加しているノードにメッセージチャンネル(パブリッシャーのストリームやそれが呼び出されたもの)を聞く地元の俳優がいることをお勧めします。フロントエンドはチャンネルで話すことができ、リスナーは地域コーディネーターに伝播します。あなたは複数のメッセージなどを処理する必要があります。 –