Dropwizard - 客户端模块会是什么样子?

时间:2013-11-05 23:30:18

标签: web-services rest jersey-client dropwizard

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

混乱的根源:

Dropwizard建议您将项目分开:

  

通常,我们建议您将项目分成三个Maven   模块:project-api,项目客户端和项目服务。

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

@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(如上面代码片段所示)
  3. 谢谢!

1 个答案:

答案 0 :(得分:1)

客户端模块的外观如何

这在很大程度上取决于您的项目范围和结构。例如,在我的一个与数据库密切相关的项目中,Client模块(或DropWizard术语中的Service类)包含我的DAO实例化以及hibernate初始化和一堆其他初始化东西(SQS等)。我也使用HTTP客户端,而Service类是我初始化它的地方。原因是Service类是入口点,这是你最终实例化你的Resource类等的地方。因此,在这里实例化的dependancies允许我将它们作为构造函数params传递给我的资源。如果你使用像Guice这样的东西,那么前进的方式会有所不同,因为你可以使用注射等。

您何时直接在服务的运行方法中实例化httpClient(如上面的代码片段所示)

当您的项目需要Http客户端时,将使用doc和您的问题中显示的HttpClient。例如,假设您的DW项目或您正在编写的资源之一要求您对Twitter API进行HTTP调用。这是Http客户端发挥作用的地方。您实际上可以使用任何所需的Http客户端库,但是使用DW提供的那些(Apache Http Client,Jersey Http Client)允许您通过允许DW启动,关闭和清理来创建“托管”Http客户端服务关闭时的HTTP客户端。因此,当您使用其托管HTTP客户端时,DW会清除线程池,连接池等所有内容。此外,在run方法中创建此HTTP Client的原因是因为您可以获得对Configuration对象实例的引用,这将允许您通过DW的配置系统控制HTTP Client的设置。

希望这能回答你的问题