我尝试使用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规范的文档。
答案 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);