我正在阅读关于 Lagom 的以下教程。
我了解 DI,但该部分还讨论了 Application 和 Loader。我无法理解创建 Application 和 Loader 类的目的。到目前为止,我已经能够在不创建应用程序和加载器类的情况下运行基本服务(例如,你好,来自GettingStarted的世界服务)。
我正在阅读关于 Lagom 的以下教程。
我了解 DI,但该部分还讨论了 Application 和 Loader。我无法理解创建 Application 和 Loader 类的目的。到目前为止,我已经能够在不创建应用程序和加载器类的情况下运行基本服务(例如,你好,来自GettingStarted的世界服务)。
让我们考虑一个示例 ApplicationLoader(这不是唯一的方法,而是一个示例)
abstract class FriendModule (context: LagomApplicationContext)
extends LagomApplication(context)
with AhcWSComponents
with CassandraPersistenceComponents
{
persistentEntityRegistry.register(wire[FriendEntity])
override def jsonSerializerRegistry = FriendSerializerRegistry
override lazy val lagomServer: LagomServer = serverFor[FriendService](wire[FriendServiceImpl])
}
class FriendApplicationLoader extends LagomApplicationLoader {
override def load(context: LagomApplicationContext): LagomApplication =
new FriendModule(context) with ConductRApplicationComponents
override def loadDevMode(context: LagomApplicationContext): LagomApplication =
new FriendModule(context) with LagomDevModeComponents
override def describeService = Some(readDescriptor[FriendService])
}
首先,我们创建一个FriendModule
扩展“LagomApplication”的类的原因是混合我们所有的依赖项。他们可能是:
通过以下操作,我们将实现与声明的服务绑定
覆盖lazy val lagomServer:LagomServer = serverForFriendService
但请注意,我们还没有将我们的微服务与Service Locator耦合。
服务定位器的作用是提供发现应用程序服务并与之通信的能力。例如:如果一个应用程序有五个不同的微服务在运行,那么每个微服务都需要知道彼此的地址才能进行通信。Service Locator 负责保存相关微服务的地址信息。在没有此服务定位器的情况下,我们需要配置每个微服务的 URL 并使其可用于每个微服务(可能通过属性文件?)。
因此,在类中,我们在开发案例中FriendApplicationLoader
绑定了我们的实现。向注册表注册我们的服务。这就是 Lagom 微服务能够以简单的方式与他人进行通信的神奇方式。LagomDevModeComponents
LagomDevModeComponents