【问题标题】:What is the purpose to create Application and Loader in Lagom在 Lagom 创建 Application 和 Loader 的目的是什么
【发布时间】:2017-12-22 15:03:31
【问题描述】:

我正在阅读关于 Lagom 的以下教程。

我了解 DI,但该部分还谈到了 Application 和 Loader。我无法理解创建 Application 和 Loader 类的目的。到目前为止,我已经能够在不创建应用程序和加载器类的情况下运行基本服务(例如,你好,GettingStarted 的世界服务)。

【问题讨论】:

  • 用于混合重要特征。考虑 i18n 或 CORS。

标签: lagom


【解决方案1】:

让我们考虑一个示例 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 的原因是混合我们所有的依赖项。他们可能是:

  • 如果应用程序依赖于 cassandra 和持久性 API,那么我们将其混合。如果应用程序需要进行 HTTP 调用,那么我们会为其提供 WSClient 等
  • 我们当然会连接编译时依赖项
  • 通过以下操作,我们将实现与声明的服务绑定

    覆盖lazy val lagomServer:LagomServer = serverForFriendService

但请注意,我们还没有将微服务与服务定位器耦合。

服务定位器的作用是提供发现应用程序服务并与之通信的能力。例如:如果一个应用程序有五个不同的微服务在运行,那么每个微服务都需要知道彼此的地址才能进行通信。 Service Locator 负责保存相关微服务的地址信息。在没有此服务定位器的情况下,我们需要配置每个微服务的 URL 并使其可用于每个微服务(可能通过属性文件?)。

所以在 FriendApplicationLoader 类中,我们在开发案例中将我们的实现与 LagomDevModeComponents 绑定。 LagomDevModeComponents向注册表注册我们的服务。这就是 Lagom 微服务如何神奇地以简单的方式与他人通信。

【讨论】:

  • 在您的 sn-p 中,您将 LagomDevModeComponents 混合到 load 中。不应该 int 进入loadDevMode 吗? (对于 ConductRApplicationComponents 特征,反之亦然)。
猜你喜欢
  • 2018-03-19
  • 2018-08-27
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-02
相关资源
最近更新 更多