Playframework 如何使用Akka配置play应用程序以在集群中运行

Playframework 如何使用Akka配置play应用程序以在集群中运行,playframework,akka,akka-cluster,Playframework,Akka,Akka Cluster,我有一个PlayFramework(PlayScala)应用程序,我想在集群中运行。因此,我可能会运行此应用程序映像的多个docker容器。我不知道这些服务器的IP地址,因为云服务提供商可以动态启动和停止它们,所以我不能指定种子节点。另外,应用程序的每个实例的所有application.conf文件都应该相同 如何配置play应用程序以使应用程序的每个实例都能够发现并加入Akka集群 我看过: 由于无法指定种子节点,是否必须使用 在application.conf文件(取自: 但是如果没有种子

我有一个PlayFramework(PlayScala)应用程序,我想在集群中运行。因此,我可能会运行此应用程序映像的多个docker容器。我不知道这些服务器的IP地址,因为云服务提供商可以动态启动和停止它们,所以我不能指定种子节点。另外,应用程序的每个实例的所有
application.conf
文件都应该相同

如何配置play应用程序以使应用程序的每个实例都能够发现并加入Akka集群

我看过:

由于无法指定种子节点,是否必须使用

application.conf
文件(取自:


但是如果没有种子节点?如果是这样,节点如何发现和加入集群?

根据需要,最好的选择可能是使用。要运行基于容器的服务,请使用AWS或更接近您的需要的服务发现

Akka Cluster Bootstrap
通过自动群集引导机制解决您不需要预先分配种子节点的问题。每个节点通过其公开的HTTP端点相互探测,如果不存在
种子节点(即不存在群集),则为“最低”节点地址将使自己成为
种子节点
,提示其他节点加入新形成的群集。有关更多详细信息,请参阅此

如Akka文档中所述,
Akka集群引导
取决于模块
Akka发现
Akka管理

libraryDependencies ++= Seq(
  "com.lightbend.akka.management" %% "akka-management-cluster-bootstrap" % "1.0.1",
  "com.typesafe.akka" %% "akka-discovery" % "2.5.21"
)
对于使用ECS的
服务发现
,将
aws api ECS
aws api ECS async
(用于非阻塞IO)分配给
application.conf
中的
akka.discovery.method
,其外观可能如下:

akka {
  cluster {
    seed-nodes = []
    seed-nodes = ${?SEED_NODES}
  }
  # ...
  management {
    cluster.bootstrap {
      contact-point-discovery {
        required-contact-point-nr = 2
        required-contact-point-nr = ${?REQUIRED_CONTACT_POINTS}
      }
    }
    # ...
  }
  discovery {
    method = aws-api-ecs-async
    aws-api-ecs-async {
      cluster = "my-ecs-cluster"
    }
  }
}
对于使用Kubernetes的
服务发现
akka.discovery.method
应在
application.conf
中分配
Kubernetes api
,如下所示:

akka {
  cluster {
    seed-nodes = []
    seed-nodes = ${?SEED_NODES}
  }
  # ...
  management {
    cluster.bootstrap {
      contact-point-discovery {
        required-contact-point-nr = 2
        required-contact-point-nr = ${?REQUIRED_CONTACT_POINTS}
      }
    }
    # ...
  }
  discovery {
    method = kubernetes-api
    kubernetes-api {
      pod-namespace = "default"
      pod-namespace = ${?K8S_NAMESPACE}
      pod-label-selector = "app=akka-cluster"
      pod-label-selector = ${?K8S_SELECTOR}
      pod-port-name = "cluster-mgmt-port"
      pod-port-name = ${?K8S_MANAGEMENT_PORT}
    }
  }
}

谢谢你。你能包括一个建议的配置与AWS豆茎一起使用吗?@沙菲克贾马尔,不幸的是我没有任何相关的豆茎配置例子在手边分享。你可能想考虑发布一个单独的问题与具体的要求。顺便说一下,有一个不错的(虽然有点过时)。可能感兴趣的博客文章。
akka {
  cluster {
    seed-nodes = []
    seed-nodes = ${?SEED_NODES}
  }
  # ...
  management {
    cluster.bootstrap {
      contact-point-discovery {
        required-contact-point-nr = 2
        required-contact-point-nr = ${?REQUIRED_CONTACT_POINTS}
      }
    }
    # ...
  }
  discovery {
    method = kubernetes-api
    kubernetes-api {
      pod-namespace = "default"
      pod-namespace = ${?K8S_NAMESPACE}
      pod-label-selector = "app=akka-cluster"
      pod-label-selector = ${?K8S_SELECTOR}
      pod-port-name = "cluster-mgmt-port"
      pod-port-name = ${?K8S_MANAGEMENT_PORT}
    }
  }
}