Apache Camel:“direct:start”端点——这是啥意思?
Posted
技术标签:
【中文标题】Apache Camel:“direct:start”端点——这是啥意思?【英文标题】:Apache Camel : "direct:start" endpoint - what does it mean?Apache Camel:“direct:start”端点——这是什么意思? 【发布时间】:2012-03-27 01:22:08 【问题描述】:我是 Apache Camel 的新手。有人可以解释一下骆驼中的“直接:开始”是什么意思吗? 请看
https://camel.apache.org/components/latest/http-component.html
from("direct:start")
.to("http://myhost/mypath");
谢谢。
【问题讨论】:
请注意,如果您正在寻找在骆驼启动时运行一次的路线,“direct:start”不是您要寻找的 - 更多信息:***.com/questions/7714211/… 【参考方案1】:上面的“direct:start”只是说路由以名为“start”的Direct Component开头。
直接端点提供路由的同步调用。如果您想将 Exchange
发送到 direct:start 端点,您将创建一个 ProducerTemplate
并使用各种发送方法。
ProducerTemplate template = context.createProducerTemplate();
template.sendBody("direct:start", "This is a test message");
start
这个名字没有什么特别之处。它只是您在引用端点时要使用的名称,可以很容易地成为direct:foo
。
【讨论】:
谢谢。我还不清楚。让我更具体一点。 “start”是否有特殊含义,或者它可以是任意字符串“foo”或“somethingelse”?第二 - 在我上面发布的 HTTP 示例的上下文中,这是什么意思?再次感谢。 无特殊含义。它只是您要用来指代端点的名称。它也可以很容易地成为“direct:foo”。 这是 Camel 网站上的link to Direct 我怎样才能在 direct:start 端点接收相同的交换?我使用了 ProducerTemplate 模板; template.sendBody("direct:start", "这是一条测试消息");发送交换。 @Koray 这取决于您使用的端点。一些端点是同步的,如“直接”,而另一些是异步的,如“seda”。【参考方案2】:direct:start 提供了在 2 个端点之间进行通信的同步方式,并且仅在您想使用骆驼消息而不是通用文件或 xml 消息进行通信时使用。
【讨论】:
【参考方案3】:假设像直接路由一样是一个名为 start 的方法,所以我们需要调用 start 方法 /direct route 来执行某些操作。下面的例子会有所帮助。
当输入文件在 XXXX 位置可用时,将触发第一条路线,当到达 line 时,实际流程将转到第二条路线。基本上,来自端点的直接路由将由某个生产者端点触发。
<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>
【讨论】:
【参考方案4】:Apache Camel direct 基本上用于在 SAME Camel 上下文中将 Exchange 从一个路由发送到另一个路由。因此,假设您从 AMQ 获取消息,并且希望为收到的每条消息填充标头,然后将其发送到邮件收件人列表。所以在这里你需要创建具有以下描述的新路由器
from(“direct:populateHeaders”)
.setHeader(“myHeader”, “myHeaderValue”)
.end()
你可以从任何路由发送你的 Exchange 对象到这个路由
...
.to(“direct:populateHeaders”)
...
请务必记住,这不适用于您的 Camel 上下文。
【讨论】:
你能解释一下如何将交换返回到呼叫路线吗?【参考方案5】:这样考虑: 每当您向骆驼路线发送消息时,都会发生两件事。 1. URI 方案,它定义了您的消息将如何被传递。以及它将交付给哪种组件类型。 2. URI 路径,它定义了该组件的实例。
现在,到您的 direct:start 位置。 'direct' 告诉这个消息应该同步发送到 Direct 组件。 'start' 告诉我们应该传递该消息的哪个直接组件实例。
不同URI路径的重要性: 现在考虑您是否必须使用不同的路线。并希望从两个不同的线程同步产生消息。使用 'direct:start' 作为路线的起点将不起作用。除非您有一些条件处理组件,否则如果您是初学者,请忘记这一点。 因为,成功地将消息传递到两个路由,您必须添加 2 个条目,即“direct:somename1”和“direct:somename2”。 “开始”不是强制性的,你可以给任何你喜欢的名字。
我建议您阅读 Martin Fowler 的 EIP 书籍中的一些章节。这是一个很好的资源。这会让你很容易理解 Camel。
【讨论】:
【参考方案6】:忘记开始。 start 只是一个停止点的名称(直接)。
直接组件可以作为同一上下文中路由之间的桥梁。
【讨论】:
【参考方案7】:这应该很容易解释:交换总是从源发送到目的地。为此,您需要创建这 02 个端点:一个将消耗(是的开始),另一个将发射。 from("direct:start") 表示“直接从“start”端点消费交换并无论如何处理它。 to("direct:start") 表示在同一骆驼上下文中“直接”将交换“发送”到“开始”端点。 使这真正模棱两可的是端点本身(即:“direct:start”)是动态隐式创建的,因此在编写代码时,您假设有一个名为“direct:start”的端点,因此您可以检索交换从它,但你也可以向它发送交换。 祝你好运!
【讨论】:
以上是关于Apache Camel:“direct:start”端点——这是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
如何在apache camel DSL或camel Processor内部设置其他身份验证属性?
使用状态码 405 获取 org.apache.camel.component.http.HttpOperationFailedException