Apache Camel:根据价值切换路线

时间:2019-01-30 13:49:01

标签: apache-camel

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

此刻我要做的是:

  1. 从Kafka检索数据
  2. 然后,在控制器中对其进行处理,并将特定值放在标头中(这里我觉得有些不对劲)
  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);

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您正在实施Content Based Router EIP,我相信您的方法是正确的。您随时可以使用CamelTestSupport来测试RouteBuilders

可能的警告:请检查.when()上的out.header.updateType检查是否调用exchange.getOut()(我不太记得),如果这样做,则可能会丢失{中的重要信息{1}}消息。这可能会导致意外结果。这只是一个警告,您可能已经知道区别。如果尚未完成,请确保到达并了解this page