首页 > 解决方案 > Apache Camel:根据值切换路由

问题描述

我是 Apache Camel 的新手,并试图找出基于某些值配置切换路由的最佳方法。

我现在做的是:

  1. 从 Kafka 中检索数据
  2. 然后,在控制器中处理,在header中放入一定的值(这里我感觉有些不对劲)
  3. 处理控制器输出头并检查值
  4. 根据标头的值选择要走的路线
this.from("direct:kafka.scenario.update").routeId("publish.scenario.kafka.controller.route")
        .log(LoggingLevel.INFO, "Send Scenario update 2 Kafka Route").process(this.publishScenarioUpdateKafkaController).choice()
        .when( simple( "${out.header.updateType} == '" + ChangeType.UPDATE + "'" ))
        .process(this.publishVmsUpdateKafkaController)
        .to(dataRefScenarioUpdateProducerRoute)
        .when( simple( "${out.header.updateType} == '" + ChangeType.CREATE + "'" ))
        .process(this.publishVmsUpdateKafkaController)
        .to(dataRefScenarioCreateProducerRoute)
        .when( simple( "${out.header.updateType} == '" + ChangeType.DELETE + "'" ))
        .process(this.publishVmsUpdateKafkaController)
        .to(dataRefMessageDeleteProducerRoute);

有什么想法吗?

标签: apache-camel

解决方案


您正在实施基于内容的路由器 EIP,我相信您的方法是正确的。您可以随时使用CamelTestSupport来测试您的RouteBuilders.

可能的警告:请查看是否.when()检查out.header.updateType调用exchange.getOut()(我不记得确切),如果确实如此,您可能会丢失消息中的重要信息IN。这可能会导致意外结果。这只是一个警告,您可能已经知道其中的区别。如果您还没有这样做,请确保访问并理解此页面。


推荐阅读