Кластеризация в Акке - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь понять кластеризацию Akka для параллельных вычислений с использованием узлов.Итак, я написал одну факториальную программу и хочу запустить ее на кластере из 3 узлов (включая главный).

Я использую файл конфигурации для предоставления начальных узлов и поставщика кластера.И чтение файла в моем коде.

cluster {
  akka {
    actor {
      provider = "cluster"
    }
    remote {
      log-remote-lifecycle-events = off
      netty.tcp {
        hostname = "127.0.0.1"
        port = 0
      }
    }

    cluster {
      seed-nodes = [
        "akka.tcp://ClusterSystem@127.0.0.1:9876",
        "akka.tcp://ClusterSystem@127.0.0.1:6789"]

      # auto downing is NOT safe for production deployments.
      # you may want to use it during development, read more about it in the docs.
      #
      # auto-down-unreachable-after = 10s
    }
  }
}

Ниже приведен код java :

package test

import java.io.File

import akka.actor.{Actor,ActorSystem, Props}
import akka.stream.ActorMaterializer
import com.typesafe.config.ConfigFactory

import scala.concurrent.ExecutionContextExecutor


class Factorial extends Actor {
  override def receive = {
    case (n: Int) => fact(n)
  }

  def fact(n:Int): Int ={
    if (n<=1){
      return 1
    }
    else {
      return n * fact(n - 1)
    }
  }
}

object ClusterActor {
  def main(args: Array[String]): Unit = {

    val configFile = "E:/Scala/StatsRuleEngine/Resources/local_configuration.conf"
    val config = ConfigFactory.parseFile(new File(configFile))

    implicit val system:ActorSystem = ActorSystem("ClusterSystem" ,config.getConfig("cluster"))
    implicit val materializer:ActorMaterializer = ActorMaterializer()
    implicit val executionContext: ExecutionContextExecutor = system.dispatcher

    val FacActor = system.actorOf(Props[Factorial],"Factorial")

    FacActor ! (5)
  }
}

При запуске программы появляется ошибка ниже

Удаленныйне удалось подключиться к [null] с java.net.ConnectException: соединение отклонено: нет дополнительной информации: /127.0.0.1:6789 [WARN] [21.01.2009 16: 31: 15.979] [Новый босс ввода-вывода № 3][NettyTransport (akka: // ClusterSystem)] Удаленное подключение к [null] не удалось с java.net.ConnectException: Соединение отклонено: нет дополнительной информации: /127.0.0.1:9876

Я пытался найтиНо я не понимаю, почему эта ошибка появляется.

1 Ответ

0 голосов
/ 21 января 2019

Когда вы загружаете свои узлы, вам нужно указать точные порты, которые будут открыты в config

  netty.tcp {
    hostname = "127.0.0.1"
    port = 0 // THE EXACT PORT
  }

Итак, если ваши начальные узлы говорят 9876 и 6789.Два узла должны указывать

  netty.tcp {
    hostname = "127.0.0.1"
    port = 9876
  }

и

  netty.tcp {
    hostname = "127.0.0.1"
    port = 6789
  }

Обратите внимание, что узел, который указан первым в списке начальных узлов, должен начинаться первым.

...