我正在努力在生产中设置 Lagom 应用程序。我曾尝试联系 Lightbend 以获得 ConductR 许可证,但很久没有回音了。所以,现在我正在寻找一种替代方法。我有多个问题。
由于现在应用程序的规模很小,我认为使用静态服务定位器现在对我有用(对其他替代方案开放)。另外,我使用 MySQL 作为我的事件存储,而不是 Cassandra 的默认配置(与此线程无关的原因)。
为了抑制 Cassandra 和 Lagom 的服务定位器,我在 build.sbt 中添加了以下几行:
lagomCassandraEnabled in ThisBuild := false
我还使用 service1-impl 模块将以下内容添加到我的 application.conf 中。
lagom.services {
service1 = "http://0.0.0.0:8080"
}
对于开发环境,我已经能够sbt runAll
在 tmux 会话中成功运行我的应用程序。使用此配置,默认 8000 端口上没有运行服务定位器,但我可以单独点击 8080 端口上的 service1。(不确定这是否是预期的行为。评论?)
我跑去sbt dist
创建一个 zip 文件,然后将其解压缩并在其中运行可执行文件。有趣的是,zip 是在 service1-impl 文件夹中创建的。那么,如果我有多个模块(服务?),sbt dist 会为每个服务创建单独的 zip 文件吗?
当我运行通过创建的可执行文件时sbt dist
,它会尝试连接到 Cassandra 并启动服务定位器并忽略我添加的静态服务定位器配置。基本上,看起来它忽略了我添加到 build.sbt 的行。谁能解释一下?
最后,如果我有 2 个服务,service1 和 service2,以及集群中有 2 个节点,其中节点 1 运行 service1,节点 2 运行这两个服务,我的静态服务定位器在 application.conf 中的外观如何,因为每个该服务将有自己的application.conf,我是否必须在所有application.confs中复制相同的配置wrt静态服务定位器?
会是这样吗?
lagom.services {
service1 = "http://0.0.0.0:8080"
service1 = "http://1.2.3.4:8080"
service2 = "http://1.2.3.4:8081"
}
由于每个特定的参与者都将在其中一个节点上产生,它如何与这个服务定位器配置一起工作?
另外,我不想在生产中的 tmux 会话中运行它。最终在生产中运行此代码的最佳方法是什么?