我是Apache Camel的新手。有人可以解释一下“直接:开始”在骆驼中的含义。 请参阅
from("direct:start")
.to("http://myhost/mypath");
感谢。
答案 0 :(得分:50)
上面的“直接:开始”只是说该路线以名为“start”的Direct Component开头。
直接端点提供路由的同步调用。如果您想将Exchange
发送到direct:start端点,您可以创建ProducerTemplate
并使用各种发送方法。
ProducerTemplate template = context.createProducerTemplate();
template.sendBody("direct:start", "This is a test message");
名称start
没什么特别之处。它只是您在引用端点时要使用的名称,可以很容易地direct:foo
。
答案 1 :(得分:6)
假设直接路由作为名称为start的方法,所以我们需要调用start方法/直接路由来执行某些操作。以下示例将有所帮助。
当输入文件在XXXX位置可用时,当第一条路线到达线路时,将触发第一条路线,实际流量将转到第二条路线。基本上,来自端点的直接路由将由某个生产者端点触发。
<route id="fileRoute">
<from uri="file:XXXX">
..
<to uri="direct:start">
</route>
<route id="directStartRoute">
<from uri="direct:start">
<to uri="http://myhost/mypath">
</route>
答案 2 :(得分:5)
Apache Camel direct主要用于在SAME Camel上下文中将Exchange从一个路由发送到另一个路由。因此,假设您正在从AMQ收到消息,并且您希望为每个消息填充标题,然后将其发送到邮件收件人列表。所以在这里你需要创建具有以下描述的新路由器
from(“direct:populateHeaders”)
.setHeader(“myHeader”, “myHeaderValue”)
.end()
从任何路线,您都可以通过编写
将Exchange对象发送到此路线...
.to(“direct:populateHeaders”)
...
重要的是要记住,这不会影响你的Camel Context。
答案 3 :(得分:2)
direct:start提供了两个端点之间通信的同步方式,只有在你想使用camel消息而不是通用文件或xml消息进行通信时才会使用它。
答案 4 :(得分:1)
像这样考虑: 每当您向骆驼路线发送消息时,有两件事情。 1. URI方案,它定义了如何传递消息。以及将要交付的组件类型。 2. URI路径,它定义该组件的实例。
现在,到你的直接:开始位置。 &#39;直接&#39;告诉该消息应该同步发送到Direct Component。 &#39;启动&#39;告诉应该传递哪个直接组件实例。
不同URI路径的重要性: 现在考虑一下你是否需要不同的路线。并希望同步从两个不同的线程生成消息。使用&#39; direct:start&#39;作为路线的起点将不起作用。除非您有一些条件处理组件,否则如果您是初学者,请忘记这一点。 为了成功地将消息传递到两个路线,您将必须添加2个条目,即&#39; direct:somename1&#39;和&#39;直接:somename2&#39;。 &#39;启动&#39;不是强制性的东西,你可以给出你喜欢的任何名字。
我建议你阅读Martin Fowler的EIP书中的一些章节。这是一个很好的资源。这将使你很容易理解Camel。
答案 5 :(得分:0)
忘记开始了。开始只是停止点的名称(直接)。
直接组件可以用作相同上下文中路由之间的桥梁。
答案 6 :(得分:0)
应该很容易解释:交换总是从源发送到目的地。为此,您需要创建这02条路线:一条路线将消耗(是的开始),另一条路线将发出。 from(“ direct:start”)的意思是“直接消耗“ start”路由中的交换并以任何方式进行处理。 to(“ direct:start”)表示在同一骆驼上下文中将交换“直接”发送到“直接”路由。 真正造成歧义的原因在于路由本身(即:“ direct:start”)是在运行时隐式创建的,因此在编写代码时,您假设存在一条名为“ direct:start”的路由,因此您可以检索交换信息从中,但您也可以向其发送交换。 祝你好运!