Scala でブロードキャスト ルーターを使用しようとしています。間違っていなければ、次のようになります。
val system = ActorSystem("My beautiful system")
val workerRouter = system.actorOf(Props[Agent].withRouter(BroadcastRouter(individualDefinitions.size)), name = "agentRouter")
それは、私がフォローしているチュートリアルから理解していることです。
workerRouter は別のアクターとして機能し、このルーターにメッセージを送信して、すべての Agent (個人の定義と同じ数) にメッセージを送信できます。
問題は、個々の定義を使用してエージェントを構築したいということです。エージェントは実際にはコンストラクターでいくつかのパラメーターを取り、それらのパラメーターは個々の定義に含まれています。
Q:コンストラクターの一部としてこれらのパラメーターをそれぞれに渡すようにルーターに指示するにはどうすればよいですか?
各アクターは 1 つの個別の定義を取得する必要があり、それらはすべて異なることに注意してください。コンストラクターが定数を受け取る関連する質問でソリューションを使用できません: Akka Java アクター モデルでは、ルーターはデフォルト以外のコンストラクターでアクターを作成できますか?
ここで、各アクターは異なるパラメーターを持つ必要があることに注意してください。そのうちの 1 つが再起動された場合、最初に取得したものと同じパラメーターを取得する必要があります。それを行うためにそのソリューションを変更できるかどうかはわかりません。
考えられる解決策は、アクターをルーターとして使用して、作成 (コンストラクター) とルーティングを分離することです。問題のAkka (java) のように、すべての children へのブロードキャストをブロックしません。
この場合、それが「正しい」アプローチであるかどうかはわかりません。アクターをルーターとして使用することには、いくつかの問題があります (エレガンス以外にも)。ルーターとして機能するアクターが再起動され、すべてのサブスクライバーが失われることを懸念しています。アクターがループの半分で再起動された場合、私の間違いでなければ、一部のアクターはいくつかのメッセージを見逃す可能性もあります。
ありがとうございました。