我正在阅读关于Lagom的教程。
我理解DI,但该部分还讨论了Application和Loader。我无法理解创建Application和Loader类的目的。到目前为止,我已经能够在不创建Application和loader类的情况下运行基本服务(例如,hello,来自GettingStarted的世界服务)。
答案 0 :(得分:2)
让我们考虑一个示例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])
}
首先,我们创建一个扩展`LagomApplication的类FriendModule
的原因是混合我们所有的依赖项。他们可能是:
通过以下操作,我们将实现与声明的服务绑定
覆盖lazy val lagomServer:LagomServer = serverForFriendService
但是请注意,我们还没有将我们的微服务与服务定位器结合起来。
服务定位器的作用是提供发现应用程序服务并与之通信的能力。例如:如果应用程序有五个不同的微服务运行,那么每个应用程序都需要知道每个其他地址才能进行通信。 服务定位器负责保存相关微服务的地址信息。如果没有这个服务定位器,我们需要配置每个微服务的URL并使其可用于每个微服务(可能通过属性文件?)。
因此,在类FriendApplicationLoader
中,我们将我们的实现与开发案例中的LagomDevModeComponents
绑定。 LagomDevModeComponents
在注册表中注册我们的服务。这就是神奇的Lagom微服务如何以简单的方式与他人沟通。