Apache Camel:“直接:开始”端点 - 这是什么意思?

时间:2012-03-09 15:31:20

标签: apache apache-camel endpoint

我是Apache Camel的新手。有人可以解释一下“直接:开始”在骆驼中的含义。 请参阅

http://camel.apache.org/http

from("direct:start")
.to("http://myhost/mypath");

感谢。

7 个答案:

答案 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”的路由,因此您可以检索交换信息从中,但您也可以向其发送交换。 祝你好运!