Camel + Java DSL Fluent 构建器与真正的 ActiveMQ Broker

问题描述 投票:0回答:3

我正在尝试使用 Java DSL Fluent Builders 实现 WireTap,它提供了以下示例代码片段。

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

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

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 规范的文档。

apache-camel activemq-classic fluent
3个回答
1
投票

错误消息的重要部分描述了问题

No component found with scheme: tcp
,这是因为camel没有“tcp”组件,但是如果您想与tcp端点交互,可以使用netty组件:

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

更多信息在这里 - http://camel.apache.org/netty.html


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的更多信息


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);
© www.soinside.com 2019 - 2024. All rights reserved.