Web services Dropwizard-客户端模块的外观如何?

Web services Dropwizard-客户端模块的外观如何?,web-services,rest,jersey-client,dropwizard,Web Services,Rest,Jersey Client,Dropwizard,我想知道Dropwizard客户端模块应该如何实现 混淆的根源: Dropwizard建议您将项目分开,如下所示: 通常,我们建议您将项目分为三个Maven 模块:项目api、项目客户端和项目服务 在客户端部分,它显示您可以在run方法中实例化dropWizard提供的httpClient @Override public void run(ExampleConfiguration config, Environment environment) { fi

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

混淆的根源:

Dropwizard建议您将项目分开,如下所示:

通常,我们建议您将项目分为三个Maven 模块:项目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

所以

  • 客户端模块是什么样子的
  • 什么时候可以直接在服务的run方法中实例化httpClient(如上面的代码片段所示)

  • 谢谢

    客户端模块的外观如何

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

    什么时候可以直接在服务的run方法中实例化httpClient(如上面的代码片段所述)

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

    希望这能回答你的问题