Camel + Java DSL Fluent构建器,带有真正的ActiveMQ Broker

时间:2014-04-14 14:33:36

标签: apache-camel activemq

我尝试使用WireTap实施Java DSL Fluent Builders,其中提供了以下示例代码段。

from("direct:start")
.to("log:foo")
.wireTap("direct:tap")
.to("mock:result");

如果我运行一个模拟示例(例如camel-example-jms-file),这是有效的。但是,如果我采用示例代码并尝试替换真正的Broker实例和Queue来替换模拟对象,则会失败并出现以下错误。

from("tcp://localhost:61616")
.to("ativemq:atsUpdateQueue")
.wireTap("activemq:fdmCaptureQueue");

然后失败

org.apache.camel.FailedToCreateRouteException: Failed to create route route2: Route(route2)[[From[tcp://localhost:61616?queue=atsUpdateQue... because of Failed to resolve endpoint: tcp://localhost:61616?queue=atsUpdateQueue due to: No component found with scheme: tcp

我已经广泛搜索过,我发现的所有示例都使用虚拟模拟队列,似乎没有说明使用真正的代理,但我找不到任何有关驼峰URI规范的文档。

3 个答案:

答案 0 :(得分:1)

错误消息的重要部分描述了问题No component found with scheme: tcp,这是因为没有" tcp" camel的组件,但如果要与tcp端点交互,则可以使用netty组件:

from("netty:tcp://localhost:61616")

此处有更多信息 - http://camel.apache.org/netty.html

答案 1 :(得分:1)

“tcp:// localhost:61616”看起来像activemq代理地址。 您需要在Java DSL中将代理地址设置为activemq组件

camelContext.addComponent("activemq", activeMQComponent("tcp://localhost:61616"));

或在spring配置文件中

<bean id="activemq"
      class="org.apache.activemq.camel.component.ActiveMQComponent">
      <property name="brokerURL" value="tcp://somehost:61616"/>
</bean>

您可以找到有关camel-activemq here

的更多信息

答案 2 :(得分:0)

感谢您的建议,虽然有助于增加我的理解,但实际上并没有解决我的问题。我的代码是错的,为了别人的利益,我应该使用以下名称。

    final String sourceQueue = "activemq:queue:atsUpdateQueue";
    final String destinationQueue = "activemq:queue:atsEndPoint";
    final String wiretapQueue = "activemq:queue:fdmCaptureQueue";

    from(sourceQueue).wireTap(wiretapQueue).copy().to(destinationQueue);