Я создаю сервис akka и для локального тестирования, используя akka-discovery в режиме конфигурации.Я обнаружил, что при переключении с определенных начальных узлов для создания кластера на механизм обнаружения (akka-discovery) мой кластерный синглтон перестает работать.По запросу я просто получаю тайм-аут от соответствующего синглтона (я использую предложенный механизм передачи этого синглтона через прокси-сервер).Я не мог ни найти решение этой проблемы, ни понять его в настоящее время, так как я создаю экземпляр SingletonManager на каждом узле после запуска начальной загрузки кластера.Даже когда я включаю ожидание около минуты после вызова ClusterBootstrap start () перед созданием одноэлементного менеджера, я получаю тот же результат, где я думаю, что такая функциональность кластера уже доступна, так как кластер работает.
Примерные примеры кода:
"com.lightbend.akka.management" %% "akka-management-cluster-bootstrap"% "0.19.0 "," com.lightbend.akka.management "%%" akka-management "%" 0.19.0 "," com.lightbend.akka.management "%%" akka-management-cluster-http "%" 0.19.0 "," com.lightbend.akka.discovery "%%" akka-discovery-config "%" 0.19.0 "," com.typesafe.akka "%%" akka-cluster "%" 2.5.18 ","com.typesafe.akka" %% "akka-cluster-metrics"% "2.5.18", "com.typesafe.akka" %% "akka-cluster-tools"% "2.5.18", "com.typesafe.akka "%%" akka-contrib "%" 2.5.18 "," io.kamon "%" sigar-loader "%" 1.6.6-rev002 "," org.scalactic "%%" scalactic "%" 3.0.5 "," com.typesafe.akka "%%" akka-stream-testkit "%" 2.5.18 "% Test", org.scalatestplus.play "%%" scalatestplus-play "%" 3.0.0 "%" test "
- Начало узла кластера (код выполняется на всех узлах):
val system = ActorSystem(applicationName, baseConfig)
AkkaManagement(system).start()
ClusterBootstrap(system).start()
val clusterSingletonProperties = ClusterSingletonManager.props(
singletonProps = SingletonActor.props,
terminationMessage = PoisonPill,
settings = ClusterSingletonManagerSettings.apply(singletonConfig)
)
actorSystem.actorOf(clusterSingletonProperties, "singleton")
- вызов контроллера (я только что отправил запрос в одиночном акторе I, по любой полученной строке вернуть другую строку без какой-либо обработки):
val workerService: ActorRef = actorSystem.actorOf(
ClusterSingletonProxy.props(
singletonManagerPath = "/user/singleton",
settings = ClusterSingletonProxySettings.create(singletonProxyConfig)
)
)
(workerService ? "holla").mapTo[String].map { message =>
val result = Json.toJson({"result" -> message})
Ok(result)
})
Вышеописанное работает, когда начальные узлы определены, но не в обнаружении.Порядок, в котором я запускаю систему, загрузчик и менеджер синглтонов для меня, предполагает, что не должно быть никаких причин, по которым служба кластеров еще не доступна, так как кластер работает при создании менеджера синглтонов.
Любые предложениягде-то там?
Спасибо, С наилучшими пожеланиями, Анди