Apache camel apachecamel:基于值的交换路由

Apache camel apachecamel:基于值的交换路由,apache-camel,Apache Camel,我是Apache Camel的新手,正在尝试找出基于特定值配置交换路由的最佳方法 我现在做的是: 从卡夫卡检索数据 然后,在控制器中处理它,并将某个值放在标题中(在这里我觉得有些不对劲) 处理控制器输出标题并检查值 根据标头的值选择要走的路线 有什么想法吗?您正在实施,我相信您的方法是正确的。您可以始终使用CamelTestSupport来测试routebuilder 可能的警告:请查看.when()是否检查out.header.updateType调用了exchange.getOut()(我记

我是Apache Camel的新手,正在尝试找出基于特定值配置交换路由的最佳方法

我现在做的是:

  • 从卡夫卡检索数据
  • 然后,在控制器中处理它,并将某个值放在标题中(在这里我觉得有些不对劲)
  • 处理控制器输出标题并检查值
  • 根据标头的值选择要走的路线
  • 有什么想法吗?

    您正在实施,我相信您的方法是正确的。您可以始终使用
    CamelTestSupport
    来测试
    routebuilder


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

    使用标题值路由消息没有错。请参阅下面关于基于内容的路由器的答案。如果您的消息是json或xml,那么您可以在没有处理器的情况下进行路由。是的,基于内容的路由器可以使用。您还可以将JavaBean方法与收件人列表模式(或优化的toD)一起使用,其中bean方法的返回值是要路由到的Camel端点uri。
    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);