美文网首页
Akka Cluster 学习笔记(2) - 配置与启动

Akka Cluster 学习笔记(2) - 配置与启动

作者: CSH2009 | 来源:发表于2018-05-21 15:59 被阅读0次

    添加依赖

            <dependency>
                <groupId>com.typesafe.akka</groupId>
                <artifactId>akka-actor_2.12</artifactId>
                <version>${akka.version}</version>
            </dependency>
            <dependency>
                <groupId>com.typesafe.akka</groupId>
                <artifactId>akka-cluster_2.12</artifactId>
                <version>${akka.version}</version>
            </dependency>
    

    akka配置文件

    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:2551",
          "akka.tcp://ClusterSystem@127.0.0.1:2552"]
      }
    }
    
    akka.extensions = ["akka.cluster.metrics.ClusterMetricsExtension"]
    
    akka.cluster.metrics.native-library-extract-folder=${user.dir}/target/native
    

    上述配置为正常配置,如果akka运行在Docker容器或NAT环境中,参考配置如下:

    akka {
      remote {
        netty.tcp {
          hostname = my.domain.com      # external (logical) hostname
          port = 8000                   # external (logical) port
    
          bind-hostname = local.address # internal (bind) hostname
          bind-port = 2552              # internal (bind) port
        }
     }
    }
    

    集群启动

    集群节点可通过配置文件自动加入(也可通过程序加入)。

    可以在同一JVM中启动Akka Cluster,也可以在不同的JVM中启动Akka Cluster,但在同一Cluster中的ActorSystem必须相同

    在不同JVM中启动Akka Cluster时:

    • 在Akka App 中,需传入Akka 运行端口;启动时,需先传入seed node参数,如下:
          // Override the configuration of the port
          Config config = ConfigFactory.parseString(
              "akka.remote.netty.tcp.port=" + port + "\n" +
              "akka.remote.artery.canonical.port=" + port)
              .withFallback(ConfigFactory.load());
    
          // Create an Akka system
           ActorSystem system = ActorSystem.create("ClusterSystem", config);
    
    • 运行Akka App时,需先启动seed node:
    sbt "runMain <packageName>.ClusterApp 2551"
    sbt "runMain <packageName>.ClusterApp 2552"
    sbt "runMain <packageName>.ClusterApp 0"
    
    mvn compile exec:java -Dexec.mainClass="<packageName>.ClusterApp" -Dexec.args=2521
    mvn compile exec:java -Dexec.mainClass="<packageName>.ClusterApp" -Dexec.args=2522
    mvn compile exec:java -Dexec.mainClass="<packageName>.ClusterApp" -Dexec.args=0
    

    port = 0表示不指定特定端口

    关于seed-node的指定
    • application.conf 文件指定
    • JVM 启动参数,如:
    -Dakka.cluster.seed-nodes.0=akka.tcp://ClusterSystem@host1:2552
    -Dakka.cluster.seed-nodes.1=akka.tcp://ClusterSystem@host2:2552
    
    • seed-nodes list中的第一个node需要最先启动,其他可不按顺序,或不启动
    • 如有两个以上的seed node已启动,第一个seed node则可以停止
    Node Join的方式
    • configure (使用 application.conf)
    • code (joinSeedNodes)
    • manually: JMX,HTTP

    相关文章

      网友评论

          本文标题:Akka Cluster 学习笔记(2) - 配置与启动

          本文链接:https://www.haomeiwen.com/subject/wztqjftx.html