Dropwizard 注册两个类/客户端



我有两个客户端实例,它们具有我正在创建的不同配置(超时,线程池等),并希望在两个客户端上利用Dropwizard的指标。

final JerseyClientBuilder jerseyClientBuilder = new JerseyClientBuilder(environment)
.using(configuration.getJerseyClientConfiguration());
final Client config1Client = jerseyClientBuilder.build("config1Client");
environment.jersey().register(config1Client);
final Client config2Client = jerseyClientBuilder.build("config2Client");
environment.jersey().register(config2Client);

但是,我得到了

org.glassfish.jersey.internal.Errors: The following warnings have been detected: 
HINT: Cannot create new registration for component type class org.glassfish.jersey.client.JerseyClient: 
Existing previous registration found for the type.

并且只显示一个客户端的指标。

如何跟踪两个客户端的指标,还是在单个 dropwizard 应用程序中拥有 2 个客户端并不常见?

没关系,事实证明我是个白痴(试图在客户端构建器上保存一些资源)。

我在原始代码中做错的 2 件事: 1.您不需要注册泽西岛客户端,只需资源即可...不知何故,我错过了代码中的资源部分,只是直接尝试注册客户端 2.您需要显式构建每个JerseyClientBuilder,然后构建单独配置的客户端,然后dropwizard将获取每个JerseyClientBuilder的指标

最后,我只需要将代码更改为以下内容:

final Client config1Client = new JerseyClientBuilder(environment)
.using(configuration.getJerseyClientConfiguration()).build("config1Client");

final Client config2Client = new JerseyClientBuilder(environment)
.using(configuration.getJerseyClientConfiguration()).build("config2Client");

嘟嘟。

environment.jersey().register()有一个javadoc列表Adds the given object as a Jersey singleton component这意味着注册的对象成为Jersey依赖注入框架的一部分。具体而言,此方法用于将资源类添加到 jersey 上下文,但 Jersey 查找的具有注释或类型的任何对象都可以通过这种方式添加。此外,由于它们是单例,因此每种具体类型只能有一个(这就是为什么您会收到来自泽西岛的"先前注册"错误)。

我想你想有两个泽西岛客户端通过REST/HTTP连接到两个不同的外部服务。由于您的服务需要与这些其他人通信才能完成工作,因此您希望在执行"工作"或业务逻辑的任何位置都可以访问客户端。

例如,本指南创建一个资源类,该类要求客户端到外部 http 服务进行货币转换。我并不是说这是一个很好的例子(只是一个dropwizard external client example的顶级谷歌结果)。事实上,我认为这对构建您的应用程序不是一个好方法。我会创建几个内部对象,这些对象对资源类隐藏货币信息的获取方式,例如业务对象 (BO) 或数据访问对象 (DAO) 等。

对于您的情况,您可能需要这样的东西(将这些视为构造函数调用)。JC = 泽西客户端,R = 资源对象,BO = 业务逻辑对象

JC1()
JC2()
B1(JC1)
B2(JC2)
R1(B1)
R2(B2)
R3(B1, B2)
environment.jersey().register(R1)
environment.jersey().register(R2)
environment.jersey().register(R3)

官方的Dropwizard文档有些帮助。他们至少解释了如何创建球衣客户端;它们不解释如何构建应用程序。

如果您使用的是dropwizard 中的Jersey 客户端构建器,则您创建的每个客户端都应自动注册以记录指标。确保您使用的是dropwizard-client工件和包io.dropwizard.client中的客户端生成器。(看起来你是因为你有using(config)方法。

最新更新