2017-07-04 109 views
2

我有两个客户端与我创建不同的配置(超时,线程池等)客户端的两个实例,并希望利用两个客户端上的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个客户端不常见?

回答

1

没关系,事实证明我是一个白痴(试图在ClientBuilder上保存一些资源)。

2我做错了我的原始代码: 1.你不需要注册Jersey客户端,只要资源就够了......不知怎的,我错过了我的代码中的资源部分,只是直接尝试注册客户端 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"); 

卫生署。

0

environment.jersey().register()具有Adds the given object as a Jersey singleton component的javadoc列表,表示注册的对象成为泽西岛依赖注入框架的一部分。具体来说,此方法用于将资源类添加到泽西语上下文中,但是可以通过这种方式添加任何具有Jersey查找的注释或类型的对象。此外,因为它们是单身人士,所以每个具体类型只能有一人(这就是为什么你从泽西岛得到​​“先前注册”错误的原因)。

我想你想让两个Jersey客户端通过REST/HTTP连接到两个不同的外部服务。由于您的服务需要与其他人通过工作交流,因此无论您在何处执行“工作”或业务逻辑,您都希望客户能够访问这些客户端。

例如,this guide会创建一个资源类,该类需要客户端使用外部http服务进行货币换算。我不是说这是一个很好的例子(只是dropwizard external client example的顶级谷歌结果)。事实上,我认为这不是一个好的结构化你的应用程序。我会创建一些内部对象,以隐藏资源类如何获取货币信息,如业务对象(BO)或数据访问对象(DAO)等。

对于您的情况,您可能需要类似这(把它们当作构造函数调用)。 JC = Jersey客户端,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) 

official Dropwizard docs有些有帮助的。他们至少解释了如何创建球衣客户端;他们没有解释如何构建你的应用程序。

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

相关问题