【问题标题】:Dropwizard - how would a client module look like?Dropwizard - 客户端模块会是什么样子?
【发布时间】:2013-11-17 01:07:11
【问题描述】:

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

混淆来源:

Dropwizard 建议您将项目分开:

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

在客户端部分,它显示您可以在 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(如上面代码的 sn-p 中所做的那样)

谢谢!

【问题讨论】:

    标签: web-services rest jersey-client dropwizard


    【解决方案1】:

    客户端模块是什么样子的

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

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

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

    希望这能回答你的问题

    【讨论】:

      猜你喜欢
      • 2015-08-28
      • 2014-12-24
      • 2023-03-13
      • 2013-05-27
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      相关资源
      最近更新 更多