2

我想知道 Dropwizard 客户端模块应该如何实现。

混乱的来源:

Dropwizard 建议您将项目分开:

一般来说,我们建议您将项目分成三个 Maven 模块:project-api、project-client 和 project-service。

在客户端部分,它显示您可以在方法中实例化 dropWizard 提供的 httpClient run

@Override
public void run(ExampleConfiguration config,
                Environment environment) {
    final Client client = new JerseyClientBuilder().using(config.getJerseyClientConfiguration())
                                                   .using(environment)
                                                   .build();
    environment.addResource(new ExternalServiceResource(client));
}

我认为客户端模块会包装 httpClient,任何其他服务都可以使用客户端模块,而无需关心它使用的是哪个 httpClient。

所以

  1. 客户端模块的外观如何
  2. 您何时会在服务的 run 方法中直接实例化 httpClient(如上面的代码片段中所做的那样)

谢谢!

4

1 回答 1

1

客户端模块的外观如何

这在很大程度上取决于您的项目范围和结构。例如,在我的一个严重依赖数据库的项目中,客户端模块(或 DropWizard 术语中的服务类)包含我的 DAO 实例化以及休眠初始化和一堆其他初始化内容(SQS 等)。我还使用 HTTP 客户端,服务类是我初始化它的地方。原因是服务类是入口点,这是您最终实例化资源类等的地方。因此,在这里实例化依赖项允许我将它们作为构造函数参数传递到我的资源中。如果您使用的是 Guice 之类的东西,那么要走的路会有所不同,因为您可以使用注射等。

您何时会在服务的 run 方法中直接实例化 httpClient(如上面的代码片段中所做的那样)

当您的项目需要 Http 客户端时,将使用文档中显示的 HttpClient 和您的问题。例如,假设您的 DW 项目或您正在编写的资源之一需要您对 twitter API 进行 HTTP 调用。这就是 Http 客户端发挥作用的地方。您实际上可以使用您想要的任何 Http 客户端库,但是使用 DW 提供的库(Apache Http 客户端,Jersey Http 客户端)允许您通过允许 DW 启动、关闭和清理在那里创建一个“托管”Http 客户端服务关闭时的 HTTP 客户端。因此,当您使用 DW 托管的 HTTP 客户端时,诸如线程池、连接池等之类的东西都会被 DW 清理干净。此外,您在 run 方法中创建此 HTTP 客户端的原因是因为您可以获取对 Configuration 对象的引用'

希望这能回答你的问题

于 2013-11-11T05:24:58.110 回答