Apache Camel中"direct:"和to()之间有什么区别?

bac*_*car 14 apache-camel

DirectComponent文档给出了下面的例子:

from("activemq:queue:order.in")
    .to("bean:orderServer?method=validate")
    .to("direct:processOrder");

from("direct:processOrder")
    .to("bean:orderService?method=process")
    .to("activemq:queue:order.out");
Run Code Online (Sandbox Code Playgroud)

这和下面有什么区别吗?

from("activemq:queue:order.in")
    .to("bean:orderServer?method=validate")
    .to("bean:orderService?method=process")
    .to("activemq:queue:order.out");
Run Code Online (Sandbox Code Playgroud)

我试图找到关于to()方法在Java DSL上的行为的文档,但是除了RouteDefinition javadoc之外(它给出了非常简单的"将交换发送到给定的端点")我发现空白:(

Pet*_*der 18

在上面的例子中,你不会注意到太大的区别."直接"组件非常类似于方法调用.

一旦开始构建更复杂的路由,您将需要出于多种原因将它们分成几个不同的部分.

例如,您可以创建可以在Camel上下文中的多个路由之间重用的"子路由".就像你在常规编程中细分方法一样,以允许可重用​​性并使代码更清晰.对于使用例如直接分量的子路由也是如此.

可以扩展相同的方法.假设您希望将多个协议用作路由的端点.您可以使用直接端点来创建主路径,如下所示:

// Three endpoints to one "main" route.
from("activemq:queue:order.in")
  .to("direct:processOrder");

from("file:some/file/path")
  .to("direct:processOrder");

from("jetty:http://0.0.0.0/order/in")
  .to("direct:processOrder");

from("direct:processOrder")
  .to("bean:orderService?method=process")
  .to("activemq:queue:order.out");
Run Code Online (Sandbox Code Playgroud)

另一件事是为DSL中的每个"from()"子句创建一个路由.路由是Camel中的工件,您可以使用Camel API对其执行某些管理任务,例如动态启动,停止,添加和删除路由."to"子句只是一个端点调用.

一旦开始做一些在Camel中有些复杂的真实案例,你会注意到你不能得到太多的"直接"路线.