【问题标题】: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");

谢谢。

【问题讨论】:

标签: apache apache-camel endpoint


【解决方案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”的端点,因此您可以检索交换从它,但你也可以向它发送交换。 祝你好运!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-08-17
            • 2011-09-04
            相关资源
            最近更新 更多