服务定位器

Service Locator嵌入在Lagom的开发环境中,允许服务发现并相互通信。有许多设置和任务可用按照您的喜好来调整嵌入式Service Locator,让我们来探索它们。

默认地址

默认情况下,服务定位器绑定到localhost,但是可以通过向build文件中添加以下内容来使用不同的地址。

  1. lagomServiceLocatorAddress in ThisBuild := "0.0.0.0"

默认端口

默认情况下,服务定位器运行在端口9008上,但是也可以使用不同的端口。例如,可以通过build文件中添加以下内容来告诉服务定位器在端口10000上运行。

  1. lagomServiceLocatorPort in ThisBuild := 10000

与外部服务通信

可以在构建中定义的Lagom服务和无限数量的外部服务(可以在本地运行,也可以在不同的机器上运行)之间实现通信。您必须做的第一件事是在服务定位器中注册每个外部服务。假设我们想要注册一个在http://localhost:3333上运行的名为weather的外部服务,下面是我们要添加到构建中的内容。

  1. lagomUnmanagedServices in ThisBuild := Map("weather" -> "http://localhost:3333")

以上内容确保服务定位器知道weather服务。然后,如果您需要一个Lagom服务来与它通信,只需@InjectServiceLocator并使用它来定位weather服务的URI,或者使用它执行任意的工作。

与外部Lagom项目整合

注意,您想与之通信的服务实际上是一个Lagom服务,那么您可能需要阅读与外部Lagom项目集成的文档。

服务网关

一些想要连接到您服务的客户端将无法访问您的服务定位器。外部客户端需要一个稳定的地址进行通信,这里就是服务网关的用武之地。服务网关将暴露并反向代理由您的服务注册的所有公共端点。服务网关嵌入在Lagom的开发环境中,允许外部的客户端(例如浏览器)连接到你的Lagom服务。

默认地址

默认情况下,服务网关绑定到localhost。可以通过将此添加到build文件中来更改该地址。

  1. lagomServiceGatewayAddress in ThisBuild := "0.0.0.0"

默认端口

默认情况下,业务网关监听9000端口上的连接。可以通过将此添加到build文件中来更改该端口。

  1. lagomServiceGatewayPort in ThisBuild := 9010

默认网关实现

Lagom开发环境提供了一个基于Akka HTTP服务网关的实现和基于Netty的实现(现在是遗留的)。
你可以选择在sbt中使用旧的netty实现:

  1. // Implementation of the service gateway: "akka-http" (default) or "netty"
  2. lagomServiceGatewayImpl in ThisBuild := "netty"

启动和停止

服务定位器和服务网关在执行runAll任务时自动启动。但是,有时您可能只想手动启动少数服务,因此您不会使用runAll任务。在这种情况下,您可以通过lagomServiceLocatorStart sbt任务手动启动服务定位器和服务网关,并通过lagomServiceLocatorStopsbt任务停止它。

禁用

可以通过在构建中添加以下内容来禁用嵌入式服务定位器和服务网关。

  1. lagomServiceLocatorEnabled in ThisBuild := false

请注意,禁用服务定位器之后,您的服务将无法相互通信。要恢复通信,您必须在您的服务中提供ServiceLocator的实现。您也将无法通过运行在http://localhost:9000上的服务网关访问您的服务(默认情况下)。相反,您需要通过每个服务自己的端口来直接访问每个服务。在开发模式下启动时,每个服务端口都被记录到控制台,例如:

  1. [info] Service hello-impl listening for HTTP on localhost:57797

有关更多信息,请参见在开发中如何配置Lagom服务?