未分配路由ID时未检测到路由? CamelContext会丢失路由信息吗?

时间:2014-10-30 06:59:25

标签: apache-camel

使用routeId定义为route1,route2和 的以下路由配置,我们故意省略第3条路线的routeId .Camel会自动生成格式为routeId的routeId如果你没有定义它,请指望你。

这似乎导致一些路由被遗漏,因为camelContext在内部存储具有Set结构的路由。想在这里加倍证实我的理解。 我可以知道是否有人遇到过同样的情况?

    from(INBOUND_ENDPOINT).routeId("route1")
            .setExchangePattern(ExchangePattern.InOnly).threads(5)
            .bean(ThroughputMeasurer.class);

    from(OUTBOUND_ENDPOINT).routeId("route2")
    .setExchangePattern(ExchangePattern.InOnly).threads(5)
    .bean(ThroughputMeasurer.class);

    from("direct:processOrder").bean(
            ThroughputMeasurer.class);

1 个答案:

答案 0 :(得分:2)

你似乎找到了一个bug。我测试了Camel v2.14.0。

路线定义:

 from("direct:start1")
     .routeId("route1")
     .log("route1: ${body}");

 from("direct:start2")
      .routeId("route2")
      .log("route2: ${body}");

 from("direct:start3") // no route id!
      .log("route3: ${body}");

测试:

 ProducerTemplate template = context.createProducerTemplate();
 template.sendBody("direct:start1", "World!");
 template.sendBody("direct:start2", "World!");

这会导致以下异常:

  

引起:org.apache.camel.component.direct.DirectConsumerNotAvailableException:端点上没有可用的消费者:端点[direct:// start1]

如果删除了"direct:start3"路由或重命名了ID "route1",那么一切都按预期工作。

修改

我打开了一个错误报告:CAMEL-7986