服务如何绑定地址
默认情况下,Lagom服务绑定到localhost。此地址可以更改如下。
lazy val biddingImpl = (project in file("biddingImpl"))
.enablePlugins(LagomScala)
.settings(lagomServiceAddress := "0.0.0.0")
如何将端口分配给服务?
在检查正在运行的服务列表时,您可能想知道端口是如何分配的。您应该注意的一件事是,端口的分配是一致的,这意味着每个服务将获得相同的端口分配。这是非常有用的,因为它允许编写执行某些服务功能的脚本,甚至可以与团队的其他成员共享创建的脚本。实际上,即使在不同的机器上,也会确定地选择相同的端口!
为每个服务分配端口的算法如下:
1)项目名称是哈希的。
2) hash绝对值投影在端口范围上(默认端口范围是【49152,65535】)。
3)如果没有其他项目声明同一个端口,则将所选端口分配给该项目。如果两个或更多的项目被投射到同一个端口上,冲突的项目将按字母顺序排序,最先出现的项目将获得分配给它的预期端口。而剩余的项目将被分配到最近(严格增加)可用的邻居端口。
通常,您不需要担心这些细节,因为在大多数情况下,端口范围足够宽,不太可能发生冲突。但是,有时您可能仍然喜欢将特定的端口分配给服务(例如,如果自动分配的端口在您的系统中已经被使用)。为此,您可以手动为项目的服务端口设置端口号。
lazy val usersImpl = (project in file("usersImpl"))
.enablePlugins(LagomScala)
.settings(lagomServiceHttpPort := 11000)
正如上面算法描述中所提到的,默认的端口分配范围是[49152,65535]。这也称为临时端口范围,这是IANA预留的用于动态端口选择的端口号范围。如果默认范围不适合您,您可以通过在构建中添加以下内容来更改它。
lagomServicesPortRange in ThisBuild := PortRange(40000, 45000)
更改之后,您的服务项目将被分配一个范围为[40000,45000]
的端口。但要注意的是,范围越小,两个或多个项目声明拥有同一个端口的可能性就越大。这本身不是问题(只要有足够的端口为所有项目),但是,在构建中添加新服务项目可能会导致分配给现有服务项目的端口发生更改,可能存在两个项目都要求相同端口的情况。如果不希望发生这种情况,请确保提供的端口范围足够宽。或者,手动为服务项目分配端口是有意义的。
开发模式下使用HTTPS
在开发模式下运行Lagom时,可以通过设置build文件来启用HTTPS。在sbt使用:
lagomServiceEnableSsl in ThisBuild := true
这将在HTTP之后启用HTTPS传输。
您还可以优化服务器绑定的端口(类似于HTTP端口):
lagomServiceHttpsPort := 20443
一旦启用,您的Lagom服务也可以通过HTTPS访问。目前,Lagom服务网关只绑定到HTTP。
Lagom的开发模式验证了这个过程,并注入了一个自签名证书。同时,在dev模式下运行的Lagom服务会自动调整为信任该证书,以便您可以使用service-to-service HTTPS调用。
Lagom服务客户端在开发模式中使用HTTP。您可以使用Play-WS或Akka-HTTP客户端API创建自己的HTTPS客户端。然后,您应该在服务定位器上进行查找,说明您需要一个HTTPS端口,并通常使用Play-WS或Akka-HTTP Client进行连接。如果您使用Akka gRPC进行业务间通信,您可能需要使用HTTPS。