Java DropWizard和Camel集成

Java DropWizard和Camel集成,java,apache-camel,dropwizard,Java,Apache Camel,Dropwizard,DropWizard是创建rest服务的一个很好的框架,camel是一个很好的路由框架。然而,这两者似乎并不那么容易整合。例如,我想使用DropWizard方法创建rest端点,然后使用camel侦听这些服务的调用并相应地路由它们 有一个功能请求,用于在camel中创建dropwizard组件: 然而,这似乎是由于在未来的一段时间 我找到的另一个资源是以下github存储库 它通过使用“直接”uri端点通知camel rest服务调用来解决这个问题。但是,必须手动将此样板文件硬编码到每个

DropWizard是创建rest服务的一个很好的框架,camel是一个很好的路由框架。然而,这两者似乎并不那么容易整合。例如,我想使用DropWizard方法创建rest端点,然后使用camel侦听这些服务的调用并相应地路由它们


有一个功能请求,用于在camel中创建dropwizard组件:

然而,这似乎是由于在未来的一段时间


我找到的另一个资源是以下github存储库

它通过使用“直接”uri端点通知camel rest服务调用来解决这个问题。但是,必须手动将此样板文件硬编码到每个rest服务中


我有一个想法,可以创建一个自定义组件,然后使用反射来查找带有@Path注释的所有类,以便在camel中注册端点,但我不确定这是否真的会触发。或者,如果我有一个路由规则,那么它会是什么呢

from("dropwizard:/some/path").to(....)
或者我被迫将rest服务的消息发送给camel

有没有更好的方法集成dropwizard和camel?还是这样?我
非常感谢DEA。

鉴于您需要在Camel中集成另一个rest框架,这两种方法都很好而且可行

另外两个REST组件已经存在,它们采用了不同的实现方法。你可能想研究这些来寻找想法

组件将路由定义为
from(restlet:http://host:port/some/path)
这是一种可视化rest端点的好方法,如果您打算对其进行路由。对于查看代码的人来说,很容易回答“此应用程序中存在哪些路径”的问题


该组件与您的另一个选项非常相似,即带有
@Path
注释的bean。CXF-RS组件应该与DropWizard组件非常相似,因为它们都实现了jax-RS规范。您可以查看CXFRS组件的详细信息以获得一些想法。我知道camel中的cxf代码库相当全面,具有许多特性,但是您应该能够从代码中理解这个概念。

几个月前,我尝试将两者集成起来。因为camel有很多选择,并且比dropwizard有更大的生态系统,所以我专注于最基本的事情——将生命周期、bean注册表和配置属性绑定在一起

您可以在这里查看:

Dropwizard服务配置

server:
logging:
properties:
  jms.from: ${JMS_FROM:-activemq:queue://.....}
  jms.broker: ${JMS_BROKER:-failover://tcp://127.0.0.1:61616}
  jms.username: ${JMS_USER:-nobody}
  jms.password: ${JMS_PASSWORD:-KnockKnock}
示例捆绑包:

  // ItemsConfiguration implements CamelConfiguration
private CamelBundle<ItemsConfiguration> camelBundle = new CamelBundle<>() {
  @Override
  protected Map<String, Object> getBeans(Map<String, Object> properties) {
    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
      (String) properties.get("jms.username"),
      (String) properties.get("jms.password"),
      (String) properties.get("jms.broker")
    );
    connectionFactory.setTrustedPackages(Arrays.asList(
      ItemStateChangeDTO.class.getPackageName(),
      "java.util"
    ));

    ActiveMQComponent amq = new ActiveMQComponent();
    amq.setConnectionFactory(connectionFactory);
    return ImmutableMap.of("activemq", amq);
  }
};
鉴于模块的文档不存在,请随意将其作为如何处理自己事情的提示。您可以使用jersey/glassfish HK2将生产者/消费者模板注入到您的服务中,因此无需深入研究特定的DI机制


也可以在github上报告问题。;-)

在你的脑海里。在仍然能够使用驼峰路由的情况下,是否可以使用dropwizard方式?一个类似的想法是将camel-CXFRS-jax-rs链接到dropwizard。想法?Dropwizard类似于jetty支持的Jersey JAX-RS实现,而CXF也是jetty支持的JAX-RS实现。我认为您需要弄清楚启用DropWizard想要实现什么,以及您认为如何方便地使用它。我认为您可以使用与设置CXF-RS相同的方法来设置DropWizard组件,方法是使用@Path注释bean。。然后在端点中引用bean(使用spring或类似工具)。
camelBundle.getContext().addRoutes(new ItemConsumer("{{jms.from}}"));